java.反射
1.概念
反射:框架设计的灵魂
将类的各个组成部分封装为其他对象。这就是反射机制
反射的好处:
- 在程序运行中,操作这些对象
- 可以解耦,降低程序的耦合性,提高程序的可扩展性
2.获取Class对象的方式
同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的class对象都是是同一个。
2.1Class.forname("全类名")方式
将字节码文件加载进内存,返回Class对象
多用于配置文件,将类名定义在配置文件中。读取文件,加载类。
2.2通过类名的属性class获取
多用于参数的传递
2.3对象.getClsss()方法
getClass()方法在object类中定义着,所有类都继承object类,都有这个方法
多用于对象的获取字节码的方式
3.使用Class对象
大部分都是获取的功能
3.1获取成员变量们
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);//暴力反射
-
3.2获取构造方法们
Constructor<?>[] getConstructors() //获取所有
Constructor<T> getConstructor(类<?>... parameterTypes)
Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)
3.3获取成员方法们
Method[] getMethods()
Method getMethod(String name, 类<?>... parameterTypes)
Method[] getDeclaredMethods()
Method getDeclaredMethod(String name, 类<?>... parameterTypes)
3.4获取类名
String getName() 获取类名