JAVA学习笔记之 反射
反射:通过一个class文件对象来使用该class文件中的构造方法,成员变量,成员方法。
-
如何获取Class类文件的对象呢?
-
A:Object类中的getClass()。
-
B:通过数据类型的一个静态的class属性。
-
C:通过Class类的一个静态方法forName()。
-
为什么开发中使用第三种格式呢?
因为我们可以通过配置文件来提供类的路径或者方法供我们使用。
相关方法:
- 方法:public static Class<?> forName(String className)
意思:通过Class类的一个静态方法获得这个类的字节码对象
使用:Class class = Class.forName("路径");
2.方法:public T newInstance()
意思:通过字节码对象获取Class的类的对象
使用:Object obj = class.newInstance(); // 其实调用的是类的无参构造方法。
- 方法:public Constructor<?>[] getConstructors()
意思:通过字节码文件对象去获取所有公共的构造方法对象
使用:Constructor[] cons = class.getConstructors();
4.方法:public Constructor<?>[] getDeclaredConstructors()
意思:通过字节码文件对象去获取所有的构造方法对象
使用:Constructor[] cons = class.getDeclaredConstructors();
5.方法:public Constructor getConstructor(Class<?>... parameterTypes)
意思:通过字节码文件对象去获取构造方法
使用:Constructor cons = class.getConstructor();//单个构造
Constructor con = c.getConstructor(String.class, int.class,
String.class);//多个构造
6.方法:public T newInstance(Object ... initargs)
意思:通过构造方法对象获取此对象
使用:Object obj = cons.newInstance();
7.方法:public void setAccessible(boolean flag)
意思:取消 Java 语言访问检查
使用:cons.setAccessible(true);
8.方法:public Field[] getFields()
意思:通过反射获取所有公共的成员变量
使用:Field[] fields = class.getFields();
9.方法:public Field getField(String name)
意思:通过反射获取获取单个成员变量
使用:Field addressField = class.getField("address");
10.方法:public void set(Object obj,Object value) 针对所有引用类型的成员变量而言
意思:给obj对象的address成员变量赋值为香港
使用:addressField.set(obj, "香港");
11.方法:public Field[] getDeclaredFields()
意思:通过反射获取所有成员变量
使用:Field[] fields = class.getDeclaredFields();