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 属性和方法)。

更多推荐