Java 反射机制 -- Java 语言反射的概述、核心类与高级应用
Java 反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为 Java 的反射机制。
Java 反射机制的核心类:
Class
:反射的核心类,可通过此类的实例获取类的属性、方法等信息。Field
:Java 类中的属性信息,可通过Class
类的getFields
和getDeclaredFields
方法获取Field
实例。Method
:Java 类中的方法信息,可通过Class
类的getMethods
和getDeclaredMethods
方法获取Method
实例。Constructor
:Java 类中的构造方法信息,可通过Class
类的getConstructors
和getDeclaredConstructors
方法获取Constructor
实例。
Java 反射机制的高级应用:
- 动态加载类:使用
Class.forName("类的全限定名")
动态加载类。 - 动态创建对象:使用
Class
实例的newInstance
方法创建对象。 - 动态调用方法:使用
Method
实例的invoke
方法调用对象的方法。 - 动态访问属性:使用
Field
实例的get
和set
方法访问和修改对象的属性值。 - 动态代理:利用
Proxy
类和InvocationHandler
接口实现动态代理。
示例代码:
// 动态加载类
Class<?> clazz = Class.forName("com.example.MyClass");
// 动态创建对象
Object myObject = clazz.newInstance();
// 动态获取方法
Method myMethod = clazz.getMethod("myMethodName", String.class);
// 动态调用方法
myMethod.invoke(myObject, "parameterValue");
// 动态访问属性
Field myField = clazz.getDeclaredField("myFieldName");
myField.setAccessible(true); // 设置私有属性可访问
myField.set(myObject, "fieldValue");
Object fieldValue = myField.get(myObject);
以上代码展示了如何使用 Java 反射机制进行基本的类操作,如加载、创建对象、调用方法和访问属性。在实际应用中,反射机制常用于框架开发,如 Spring 和 Hibernate,以及各种 ORM 框架中,用于实现类的动态加载和运行时元数据的操作。
评论已关闭