反射:框架设计的灵魂
将类的各个组成部分封装为其他对象。这就是反射机制
反射的好处:
同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的class对象都是是同一个。
将字节码文件加载进内存,返回Class对象
多用于配置文件,将类名定义在配置文件中。读取文件,加载类。
多用于参数的传递
getClass()方法在object类中定义着,所有类都继承object类,都有这个方法
多用于对象的获取字节码的方式
大部分都是获取的功能
Filed[] getFields() //获取所有public修饰的成员变量 返回一个Filed[]数组
Filed getField(String name)//获取指定名称 public修饰的成员变量
Field[] getDeclaredFields() //获取所有的成员变量,不考虑修饰符
Field getDeclaredField(String name)
Field成员变量
获取值
Object get(Object obj)
设置值
void set(Object obj, Object value)
忽略安全的访问权限修饰符安全检查
setAccessible(boolean);//暴力反射
Constructor<?>[] getConstructors() //获取所有
Constructor<T> getConstructor(类<?>... parameterTypes)
Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)
Method[] getMethods()
Method getMethod(String name, 类<?>... parameterTypes)
Method[] getDeclaredMethods()
Method getDeclaredMethod(String name, 类<?>... parameterTypes)
String getName() 获取类名