Java反射机制:详解及示例
Java的反射机制是一种强大的工具,它允许程序在运行时检查类的信息、创建对象、调用方法等。
1. 类的加载过程
- Bootstrap Class Loader: 执行JVM初始化,加载并初始化
sun.boot.classloader
。 - Extension Class Loader: 用于加载所有扩展名的类。如果类文件存在且扩展名正确,那么此加载器会使用默认的ClassLoader来加载类。
- Application Class Loader: 最后加载用户定义的类,例如Java主程序编写的类。
2. 反射相关API
- Class: 定义了类的信息,如全名、父类等。创建Class对象需要Class的ClassLoader或其子类的加载器。
- Constructor: 类的构造方法信息。通过Class的getConstructors()方法获取。
- Method: 方法的信息,包括方法名、参数类型、返回类型等。通过Class的getMethods()方法获取。
- Field: 字段的信息,如字段名、字段类型等。通过Class的getFields()方法获取。
3. 示例
// 获取类对象
Class<?> clazz = Class.forName("java.lang.String");
// 创建对象
Object obj = clazz.newInstance(); // String
// 检查方法信息
Method method = clazz.getMethod("length", Object.class)); // Integer
// 调用方法
int length = (Integer) method.invoke(obj); // 0 (空字符串长度)
// 获取字段
Field field = clazz.getField("CASE_INSENSITIVE"); // Field
// 设置字段值
field.set(obj, "test CASE_INSENSITIVE value")); // String
// 获取对象属性值
String caseInsensitiveValue = (String) field.get(obj); // "test CASE_INSENSITIVE value"
以上就是Java反射机制的详解及示例。在实际开发中,利用反射可以实现很多动态操作,提高了代码的灵活性和可维护性。
还没有评论,来说两句吧...