概念
Java的反射机制,是在程序运行时,可以动态获取任意一个类的属性和方法,或者获取一个对象所属的类,并通过获取到的方法,传入对象和参数进行调用
使用方法
获取一个类的类对象
1.如果在编写代码时, 指导类的名称, 且类已经存在, 可以通过 包名.类名.class 得到一个类的 类对象
2.如果拥有类的对象, 可以通过 Class 对象.getClass() 得到一个类的 类对象
3.如果在编写代码时, 知道类的名称 , 可以通过 Class.forName(包名+类名): 得到一个类的 类对象
获取一个类的构造方法
1.通过指定的参数类型, 获取指定的单个构造方法 getConstructor(参数类型的class对象数组)
2.获取构造方法数组 getConstructors();
3.获取所有权限的单个构造方法 getDeclaredConstructor(参数类型的class对象数组)
4.获取所有权限的构造方法数组 getDeclaredConstructors();
获取Method
1.getMethod(String methodName , class.. clss)
根据参数列表的类型和方法名, 得到一个方法(public修饰的)
2.getMethods(); 得到一个类的所有方法 (public修饰的)
3.getDeclaredMethod(String methodName , class.. clss)
根据参数列表的类型和方法名, 得到一个方法(除继承以外所有的:包含私有, 共有, 保护, 默认)
4.getDeclaredMethods(); 得到一个类的所有方法 (除继承以外所有的:包含私有, 共有, 保护, 默认)
获取Field
1. getDeclaredField(String filedName) 根据属性的名称, 获取一个属性对象 (所有属性)
2. getDeclaredFields() 获取所有属性
3. getField(String filedName) 根据属性的名称, 获取一个属性对象 (public属性)
4. getFields() 获取所有属性 (public)
性能问题
反射会影响系统的性能,具体体现在getDeclaredFields()
与getFields()
这两个方法,这两个方法在寻找类的成员或者方法时,是通过遍历方法区来获取的,因此被执行的次数越多,遍历的次数也越多,系统性能也因此降低