温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何用反射获取类信息

发布时间:2026-09-14 02:28:23 来源:亿速云 阅读:101 作者:小樊 栏目:编程语言

在 Java 中,反射(Reflection) 可以在运行时获取类的结构信息(类名、属性、方法、构造器等),并可以动态调用。下面按“常用场景 + 示例代码”来说明。


一、获取 Class 对象的三种方式

反射的起点是 Class 对象:

// 方式1:通过类名
Class<?> clazz1 = Student.class;

// 方式2:通过对象
Student s = new Student();
Class<?> clazz2 = s.getClass();

// 方式3:通过全类名(最常用,动态性最强)
Class<?> clazz3 = Class.forName("com.example.Student");

二、获取类的基本信息

Class<?> clazz = Class.forName("com.example.Student");

System.out.println(clazz.getName());        // 全类名
System.out.println(clazz.getSimpleName());   // 类名
System.out.println(clazz.getPackage());      // 包信息
System.out.println(clazz.getModifiers());    // 修饰符

三、获取构造方法

// 所有 public 构造
Constructor<?>[] constructors = clazz.getConstructors();

// 指定参数类型的构造
Constructor<?> constructor =
        clazz.getConstructor(String.class, int.class);

// 创建对象
Object obj = constructor.newInstance("Tom", 18);

若构造是 private,可用 getDeclaredConstructor() + setAccessible(true)


四、获取字段(属性)

// 所有 public 字段
Field[] fields = clazz.getFields();

// 指定字段
Field field = clazz.getDeclaredField("name");
field.setAccessible(true); // 访问 private

// 获取 / 设置值
Object value = field.get(obj);
field.set(obj, "Jerry");

五、获取方法并调用

// 所有 public 方法
Method[] methods = clazz.getMethods();

// 指定方法
Method method = clazz.getDeclaredMethod("sayHello", String.class);
method.setAccessible(true);

// 调用
Object result = method.invoke(obj, "World");

六、获取注解信息

if (clazz.isAnnotationPresent(MyAnnotation.class)) {
    MyAnnotation ann = clazz.getAnnotation(MyAnnotation.class);
    System.out.println(ann.value());
}

七、常见注意点

  1. 性能较低:反射比直接调用慢,不宜高频使用
  2. 安全限制:部分环境(如模块系统、安全管理器)会限制反射
  3. private 成员:需 setAccessible(true)
  4. 异常处理:常见 ClassNotFoundException、NoSuchMethodException

如果你愿意,我可以:

  • 用 一个完整可运行示例 演示
  • 对比 反射 vs 普通调用
  • 讲 Spring / MyBatis 中反射的使用场景
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手