Java 反射机制 -- Java 语言反射的概述、核心类与高级应用
warning:
这篇文章距离上次修改已过440天,其中的内容可能已经有所变动。
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 框架中,用于实现类的动态加载和运行时元数据的操作。
评论已关闭