跳转至
用户认证 - eMac Tech Docs

用户认证

重要提醒

为了您的权益以及学习体验,请不要外借账号!

如果您没有账号或忘记密码,请联系管理员重置密码。

请输入您的登录信息

Java反射机制

反射核心概念

flowchart TD
    subgraph 反射机制
        class[Class对象]
        constructor[Constructor]
        method[Method]
        field[Field]
    end

获取Class对象

// 1. 类名.class
Class<?> clazz1 = String.class;

// 2. 对象.getClass()
String str = "";
Class<?> clazz2 = str.getClass();

// 3. Class.forName()
Class<?> clazz3 = Class.forName("java.lang.String");

核心操作示例

// 创建实例
Constructor<?> constructor = clazz.getConstructor(String.class);
Object instance = constructor.newInstance("test");

// 调用方法
Method method = clazz.getMethod("length");
int length = (int) method.invoke(instance);

// 访问字段
Field field = clazz.getDeclaredField("value");
field.setAccessible(true);
byte[] value = (byte[]) field.get(instance);

动态代理

interface Service {
    void serve();
}

class RealService implements Service {
    public void serve() {
        System.out.println("实际服务");
    }
}

Service proxy = (Service) Proxy.newProxyInstance(
    Service.class.getClassLoader(),
    new Class[]{Service.class},
    (proxyObj, method, args) -> {
        System.out.println("前置处理");
        Object result = method.invoke(new RealService(), args);
        System.out.println("后置处理");
        return result;
    }
);

性能考虑

  1. 反射调用比直接调用慢约50-100倍
  2. 缓存频繁使用的Class/Method对象
  3. 考虑使用MethodHandle替代
  4. 避免在性能关键路径使用

应用场景

  1. 框架设计(如Spring IOC)
  2. 动态代理(AOP实现)
  3. 通用工具类
  4. 注解处理器
  5. 序列化/反序列化