反射机制获取类的信息

一、什么是反射

        反射(Reflection) 被视为动态语言的关键。反射机制允许Java程序在运行过程中获取内部的信息并能直接操作任意对象。反射可以换一种方式获取对象 对象的属性 对象的构造方法 对象的方法。

二、获取Class对象

        Java的每个类文件运行后都会生成一个字节码文件(class),这个class文件包含了类中所有的信息(属性,方法,构造方法)。Java通过字节码文件可以将他转换成Class对象。

class Person{
    属性;
	方法;
	构造方法;
} 

public class Demo {
    public static void main(String[] args) throws ClassNotFoundException {

        //三种获取Class对象的方式:

        //1.类.class 获取
        Class<Person> personClass = Person.class;
        System.out.println(personClass);

        //2.Class.forName  通过类的全限定名字来获取类所对应的CLass对象
        Class<?> aClass = Class.forName("包名.Person");
        System.out.println(aClass);

        //3.  通过对象来创建Class对象
        Class<? extends Person> aClass1 = new Person().getClass();
        System.out.println(aClass1);

        //代码走到这一步 已经获取了Person.class字节码文件对象
        //Person.class字节码文件 存了好多的类的信息,挨个取出来即可

    }
}

三、获取Constructor对象

通过Class对象调用方法获取构造方法:

Constructor<T> getConstructor()	//获取类的公共构造函数

Constructor<?>[] getConstructors()	//获取类的所有公共构造函数

Constructor<T> getDeclaredConstructor()	//获取类的某个任意的构造方法(包括私有的)

Constructor<?>[] getDeclaredConstructors()	//获取类的所有任意构造方法(包括私有的)

通过Constructor对象调用的方法:

newInstance(对象结构方法对应的数据)		
//使用此Constructor对象表示的构造函数
//使用指定的初始化参数来创建和初始化构造函数的声明类的新实例

四、获取Method对象

通过Class对象调用方法获取方法:

方法 getMethod()	//返回一个公共的成员方法

方法[] getMethods()	//返回一个包含所有公共成员方法的数组(包括继承的方法)

方法 getDeclaredMethod()	//返回一个任意的成员方法

方法[] getDeclaredMethods()	//返回一个包含所有成员方法的数组(不包括继承的方法)

通过Method对象调用的方法:

Object invoke(类名, 方法的实参);	//使用方法对象.invoke(),方法会执行

//另外,如果是执行私有的方法,需要:
方法名.setAccessible(true);

五、获取Field对象

通过Class对象调用方法获取:

Field getField(String name)		
//返回一个Field对象,它反映此表示的类或接口的一个公共成员属性

Field[] getFields()		
//返回一个Field对象数组,它反映此表示的类或接口的所有公共成员属性
    
Field getDeclaredField(String name)		
//返回一个Field对象,它反映此表示的类或接口的一个任意成员属性(包括私有的)
    
Field[] getDeclaredField()		
//返回一个Field对象数组,它反映此表示的类或接口的所有成员属性

通过Field对象调用的方法:

void set(类名, 数据)  //通过属性.set()将数据赋值给属性
    
//另外,如果是执行私有的属性,需要:
方法名.setAccessible(true);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值