深入浅出 Java 反射机制:打破常规的“终极武器”
1. 什么是 Java 反射机制?
在正常的 Java 开发中,我们需要先 import 某个类,然后通过 new 去实例化它。而反射(Reflection)则相反,它允许程序在运行期间(Runtime)借助于 Reflection API 取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。
一句话概括: 反射让 Java 具备了“动态性”,赋予了程序在运行时“自我检查”和“自我修改”的能力。
2. 反射的核心作用与应用场景
开发通用框架: 像 Spring 的 Bean 注入、MyBatis 的 ORM 映射,底层全部大量依赖反射。
动态加载类: 在运行时动态决定加载哪个驱动或类。
解耦: 降低代码之间的硬编码耦合度。
3. 反射的核心 API 与代码示例
以下是获取类对象的三种常见方式以及动态创建对象、调用方法的经典代码:
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
public class ReflectionDemo {
public static void main(String[] args) throws Exception {
// 1. 获取 Class 对象的三种方式
// 方式一:通过类名.class
Class<?> clazz1 = User.class;
// 方式二:通过全类名路径(最常用,可写在配置文件中)
Class<?> clazz2 = Class.forName("com.example.User");
// 2. 动态创建实例(通过构造器)
Constructor<?> constructor = clazz2.getConstructor(String.class);
Object userInstance = constructor.newInstance("张三");
// 3. 动态调用方法
Method sayHelloMethod = clazz2.getMethod("sayHello");
sayHelloMethod.invoke(userInstance); // 输出: Hello, 我是张三
}
}
// 辅助测试类
class User {
private String name;
public User() {}
public User(String name) { this.name = name; }
public void sayHello() { System.out.println(“Hello, 我是” + name); }
}
4. 反射的优缺点
优点: 极大地提高了代码的灵活性和扩展性。
缺点: 1. 性能开销: 反射是一种解释操作,比直接的 Java 代码要慢。
2. 安全问题: 破坏了类的封装性(反射可以强制访问 private 属性和方法)。
更多推荐
所有评论(0)