定义JAVA反射机制是在运行状态中,
对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意方法和属性;
这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
用途
在日常的第三方应用开发过程中,
经常会遇到某个类的某个成员变量、方法或是属性是【私有的】或是【只对系统应用开放】,
这时候就可以利用Java的反射机制通过反射来获取所需的 私有成员或是方法。
第一步:获取字节码对象
Class<?> clazz = Class.forName("com.june.Test");
第二步:获取成员 注解/构造方法/字段/方法
Annotation/Constructor<T>/Filed/Method
annotation/constructor/filed/method
= clazz.getXxx()/clazz.getDeclaredXxx()(成员为私有的时候);
1-获取构造函数,并创建实例:
无参: clazz.getConstructor().newInstance(); 或者 clazz.newInstance();
有参: class.getConstructor(String.class,Integer.class).newInstance("june",26);
2-获取字段,并set字段的值或get字段的值:
Object test = clazz.newInstance();
Filed field = clazz.getField("name");
filed.set(test,"june");//设置字段name的值
Object name = filed.get(test);//获取字段name的值
3-获取方法,并执行方法
获取有参,无返回的方法:
Object test = clazz.newInstance();//获得实例
Method m = clazz.getMethod("testMethod",Integer.class);
m.invoke(test,1234);//对该实例,执行方法
获取有参,有返回的方法;获取无参无返回方法等。。。
第三步(私有的方法,暴力反射):让jvm取消访问控制
clazz.setAccessible(true);