反射 2018-05-07

反射

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

你可能感兴趣的:(反射 2018-05-07)