java反射机制(应用大于实践)

定义:
加载一个运行时才知道的类以及它的完整内部结构。数组

Class<PeStudent> studentClass = PeStudent.class;函数

API解释:
1 Class 类的实例表示正在运行的 Java 应用程序中的类和接口。
2 每一个数组,全部具备相同元素类型和维数的数组都共享该 Class 对象。
基本的 Java 类型(boolean、byte等)和关键字 void 也表示为 Class 对象
3 Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及经过调用类加载器中的 defineClass 方法自动构造的。 对象

应用:
Class对象获取类加载器:
ClassLoader classLoader = PeStudent.class.getClassLoader();
经常使用来获取文件绝对路径:
String path = classLoader.getResource("").toURI().getPath();接口

获取的构造函数进行建立对象:
Constructor[] constructors = PeStudent.class.getConstructors();
PeStudent peStudents = (PeStudent) constructors[0].newInstance("11","11","11");
System.out.println(peStudents);get

Constructor constructor = PeStudent.class.getConstructor(String.class, String.class);
PeStudent peStudent = (PeStudent) constructor.newInstance("aa", "cc");
System.out.println(peStudent);虚拟机

根据方法名称以及参数Class对象,获取指定的method
Method method = PeStudent.class.getMethod("method");
Method method = PeStudent.class.getMethod("aa", String.class);
System.out.println(method.invoke(new PeStudent("1", "2"), "张三"));class

经过Field类给字段设置值 getField、getDeclaredField 区别前者访问公共成员,后者能够访问到全部成员
PeStudent peStudent = new PeStudent("原值name", "age3岁");
Field field = PeStudent.class.getDeclaredField("name");
field.setAccessible(true); // 参数值为true,禁止访问控制检查
field.set(peStudent, "替换name");构造函数

isInstance 判断是否为某个类的实例
System.out.println(PeStudent.class.isInstance(new PeStudent()));程序

 

凌晨5点的北京你见过吗?我没有...方法

共勉

相关文章
相关标签/搜索