反射
1:什么是反射:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;
这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
过程:
class.forName()方法获得class对象(主要用的方法)
Class cls = class.forName("com.ggy.obj.Person");
获得对象,构造方法,普通方法,属性
获取类构造方法的方法有:
getConstructor(class<>... paramterTypes)返回一个Constructor对象,反映此类的指定公共构造方法
getConstructors()返回所有公共构造方法
先实例化对象:
Object obj = cls.newInstance();这是有无参的构造方法,若是没有则要先获取构造方法
Constructor cons = cls.getConstructor(String.class,int.class);
cons.newInstance("张三","王五")
获取类中的方法:
getDeclaredMethod(String name,Class... paramterTypes)返回指定已声明方法
getDeclaredMethods()返回所有已声明的方法,不包括继承的方法
当取得方法后(Method m2 = cls.getDeclaredMethod("setName", String.class)),
m2.invoke(Object odj,Object... args)表示调用该obj对象的带args参数的方法
调用成员属性:
getDeclaredField(String name)返回指定的已声明属性
getDeclaredFields()返回声明的所有属性
属性在调用之前需要解除封装:
Field nameField = cls.getDeclaredField("name"); // 获得name属性
nameField.setAccessible(true); // 如何用解除封装了
nameField.set(obj, "张三"); // Person对象.name = "张三"
例:spring,bean
网友评论