Java的反射机制前言:Java反射的使用:总结:

前言:

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

Java反射的使用:

有如下student类:

public class Student {
    private int age;
    private String name;
        public Student() {
         super();
    }
    public Student(int age, String name) {
        super();
        this.age = age;
        this.name = name;
    }
    public void study() {
        System.out.println("测试反射!");
    }
}

现在通过反射来获取student类的信息: 一、获取class对象 获取class对象有三种方式,如下: 1、方式一:

Class clazz =Class.forName("com.demos.reflect.Student");

注意:forName里面的参数是Student的全类名。

2、方式二:

Class clazz = Student.class;

3、方式三:

Class clazz = stu.getClass();

注:这种方法是已有该类的对象时使用,即已有stu对象。

二、获取类的信息 得到了Class对象后,就可以通过Class对象获取类的信息,部分方法如下: 1、获取属性:

Field[] fs = clazz.getDeclaredFields();//获取所有属性
        for(Field f : fs) {
            //获取属性名
            System.out.println(f.getName());
            //获取属性的数据类型
            Class pp = f.getType();
            System.out.println(pp.getName());//类型带包名
            //System.out.println(pp.getSimpleName());//不带包名
        }

2、获取类的方法:

//拿单个方法(study方法有参数的话还得写上参数类型,
        //例如:clazz.getMethod("study",String.Class))
        //Method m = clazz.getMethod("study");//获取单个方法
        //Method[] ms = clazz.getMethods();//包括父类方法
        Method[] ms = clazz.getDeclaredMethods();//不包括父类方法
        for(Method m : ms) {
            //获取类的方法名
            System.out.println(m.getName());
        }

三、动态创建对象,调用方法 1.1、创建对象方式一:

Object obj = clazz.newInstance();
System.out.println(obj);

注意:这种方式创建对象因为没传参数,所以Student类必须要有一个无参构造。

1.2、创建对象方式二:

Constructor cos = clazz.getConstructor(int.class,String.class);
    Object obj2 = (Student)cos.newInstance(20,"张三");
System.out.println(obj2);

注意:这种方式带参创建对象,需要有带参构造。

2、调用方法: 有了对象就可以调该类的方法,如下:

Method m = clazz.getMethod("study");
m.invoke(obj);

图片发自简书App

控制台输出输出"测试反射",正是study方法里打印的那句话。

总结:

Java的反射机制应用非常广泛,像spring、hibernate等框架底层都用到了反射,理解反射机制,可以帮助我们更好的理解这些框架的原理。

以上内容属于个人笔记整理,如有错误,欢迎批评指正!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java帮帮-微信公众号-技术文章全总结

Java基础-day09-对象;类;封装 学生管理系统

Java基础-day09-对象&类&封装 学生管理系统 ●★●★●★●★●★●★●★●★●★●★●★●★●★●★●★●★●★●★●★●★●★●★●★●★ ? ?...

3445
来自专栏个人随笔

反射反射 程序员的快乐

java反射操作其实就是主要围绕Class,Field,Methon,Constructor等几个类来操作其中的方法

4044
来自专栏编程

Python的类和对象

对象=属性(特征)+方法(行为) 类:在python中,把具有相同属性和方法的对象归为一个类(class) self: init()构造方法,只要实例化一个对象...

17710
来自专栏IT可乐

Java 反射详解

  反射反射,程序员的快乐! 一、什么是反射?   通过百度百科我们可以知道,Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;...

1737
来自专栏Java开发者杂谈

JDK1.7新特性(4):java语言动态性之反射API

直接通过一个代码示例来熟悉java中通过反射来对构造函数/域以及方法处理的相关API: 1 package com.rampage.jdk7.chapter...

2728
来自专栏blackheart的专栏

[C#6] 5-自动属性增强

0. 目录 C#6 新增特性目录 1. 老版本代码 1 internal class Person 2 { 3 public string Nam...

1997
来自专栏微信公众号:Java团长

Java反射初探 ——“当类也学会照镜子”

镜子(反射机制)照出(反射)了人的全貌(类的全方位的信息,例如方法,成员变量和构造器等的相关信息)

613
来自专栏java达人

List的四张面孔(泛型)

编程的时候,能在编译时发现并修改错误最好,等上线运行时报错才解决,则属于生产事故,且找到bug的位置需要花费更多的时间和精力。泛型是java1.5以后出的内容,...

1945
来自专栏wblearn

java反射技术

想必开发过接口的童鞋们,应该或多或少写过一些接口说明文档。那么,有没有可能把现有的接口做成一个界面在页面展现出来而不用去写什么接口文档,在页面展示的信息包括接口...

772
来自专栏xingoo, 一个梦想做发明家的程序员

程序猿的日常——Java基础之抽象类与接口、枚举、泛型

再次回顾这些基础内容,发现自己理解的又多了一点。对于一些之前很模糊的概念,渐渐的清晰起来。 抽象类与接口 抽象类通常是描述一些对象的通用方法和属性,并且默...

17810

扫码关注云+社区