反射机制
将类的各个组成部分封装为对象。
获取Class类对象的方式:
Class.forname("全类名")
:将字节码文件加载进内存,返回类对象(多用于配置文件)类名.class
:通过类名来获取对象.getClass()
:在Object中,所有对象均可使用
注:同一个*.class文件在一次程序运行过程中只会加载一次,不论通过哪一种方式获取的Class对象都是同一个。
使用Class对象
获取成员对象们
Field getField(String name)//只能获取public修饰符的
Field[] getFields()
Field getDeclaredField(String name)
Field[] getDeclaredFields()
获取构造方法们
Constructor<T> getConstructor(Class<?>... parameterTypes)//只能获取public修饰符的
Constructor<?>[] getConstructors()
Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
Constructor<?>[] getDeclaredConstructors()
获取成员方法们
Method getMethod(String name, Class<?>... parameterTypes) //只能获取public修饰符的
Method[] getMethods()
Method getDeclaredMethod(String name, Class<?>... parameterTypes)
Method[] getDeclaredMethods()
获取类名
String getName()
注:上述方法使用getDeclaredxxx可以获取所有修饰符修饰的内容,当需要操作他们时需要使用x.setAccessible(true)
忽略权限检查(暴力反射)
使用Field
设置值:
Object get(Object obj)
获取值:
void set(Object obj, Object value)
使用Constructor
创建对象:
T newInstance(Object... initargs)
//Object person=constror.newInstance("张三",23);
注:如果是空参构造可简化为:class对象的newInstance()
使用Method
执行方法:
Object invoke(Object obj, Object... args)
获取方法名:
String getName()