反射

作用:在运行状态中,获取任意一个类的构造,从而创建对象,获取指定办法或属性,并执行办法.

这种在运行状态动静获取信息以及动静调用对象办法(动静加载机制)的性能被称为java的反射机制.

反封装


获取类构造Class

Class c = 包名.类名.class

或者

Class c = 对象.getClass()

或者

Class.forName("包名+类名")

对于形式3,如果无奈找到给定的全限定名对应的类,则会抛出ClassNotFoundException异样.

获取构造方法Constructor

通过获取的Class对象,调用办法

getConstructor(参数列表)

或者

getDeclaredConstructor(参数列表)

从而或者指定参数列表的构造方法.

或者通过getConstructors()getDeclaredConstructors()获取所有构造方法

其中getDeclaredConstructor只能获取私有权限的构造方法,而getDeclaredConstructors能够获取所有权限的构造方法.

获取构造方法之后,即可通过newInstance(参数列表)办法创建对象.对于非公有权限的构造方法,须要通过setAccessible(true)设置疏忽拜访查看.

获取成员办法Method

在获取类构造/Class对象之后,能够通过

getMethod(办法名,参数列表)
或者
getMethods()

getDeclaredMethod(办法名,参数列表)
或者
getDeclaredMethods()

获取该类下的指定成员办法或者所用成员办法.

而后通过办法invoke(对象,参数列表)执行该办法

同样,对于非公有权限的办法须要通过setAccessible(true)设置疏忽拜访查看.

获取成员属性Field

获取成员属性的形式与获取成员办法的过程根本相似

须要通过办法

getField(属性名)
或者
getFields()

getDeclaredField(属性名)
或者
getDeclaredField()

获取指定名称的属性或者所有属性,而后调用其get/set办法

同时通过setAccessible(true)设置疏忽拜访查看.

获取注解

获取类构造,办法,属性之后,能够通过

getAnnotations(注解类型.class)

获取其上的注解的对象,而后调用对应的注解内的办法,获取注解外部的值.