一、Java 反射机制
-
定义:
反射:能够分析类功能的程序。
反射机制:a.在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;b.对于任意一个对象,都能够调用它的任意一个方法和属性;
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 -
反射机制的作用:
a. 运行时分析类的功能
b. 运行时查看对象。
c. 实现通用的数组操作对象。
d. 利用Method对象。 -
原理
Java 运行时系统始终为所有的对象维护一个被称为运行时的类型标识。
这个信息跟踪着每个对象所属的类。虚拟机利用运行时类型信息选择相应的方法执行。
通过专门的 Java 类访问这些信息。保存这些信息的类被称为 Class, 这 个 名字很容易让人混淆。Object 类中的 getClass( ) 方法将会返回一个 Class 类型的实例。
二、Java 反射机制的运用
- Object 类中的 getClass( ) 方法将会返回一个 Class 类型的实例。
a.加载类的对象, Class对象
Class cl = Class.getClass();
例如:
创建实体类User.java 类。
User user = new User();
//返回类对象
Class cl = user.getclass();
//返回类的名称
String name = cl.getName();
b.静态方法 forName 获得类名对应的 Class 对象
Class cl = Class.forName(“类的包.类名”);
String dassName = "java.util .Random";
Class cl = Cl ass.forName(dassName);
- newInstances() : 动态地创建一个类的实例
例如:
//默认使用类的无参构造方法
User user;
user.getClass().newlnstance();
补充:
c. 获取类的字段
Class cl;
Field f = cl.getField(String name); //指定的字段
Field f = cl.getDeclaredField(String name); //指定的字段,需要在修改字段值时必定设置可访问性
f.setAccessible(true); //设置可访问性
d. 获取类的方法
Class cl;
Method m = cl.getMethod(方法名);
Method m = cl.getDeclaredMethod(方法名,Class... pType);
//访问方法之前,设置可访问性
m..setAccessible(true);
//执行方法
Object obj = m.invoke(实例的对象,Class... agrValue)
参考:《Java核心技术》