反射
作用:在运行状态中,获取任意一个类的构造,从而创建对象,获取指定办法或属性,并执行办法.
这种在运行状态动静获取信息以及动静调用对象办法(动静加载机制)的性能被称为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)
获取其上的注解的对象,而后调用对应的注解内的办法,获取注解外部的值.