温馨提示×

温馨提示×

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

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

如何获取class对象反射

发布时间:2026-10-04 17:04:05 来源:亿速云 阅读:88 作者:小樊 栏目:编程语言

在 Java 中,**获取 Class 对象(反射入口)**有多种方式,下面按常见场景给你系统梳理一下。


一、通过「已知类」获取 Class 对象

1. 使用 .class 语法(编译期可知)

Class<?> clazz = String.class;

✅ 最简单、最安全
✅ 不会触发类初始化(只是获取 Class 对象)


2. 使用 Class.forName()(最常用)

Class<?> clazz = Class.forName("java.lang.String");

✅ 运行时根据类名加载
✅ 会触发类初始化(静态代码块会执行)

可指定类加载器:

Class<?> clazz = Class.forName(
    "com.example.User",
    true,
    getClass().getClassLoader()
);

二、通过「对象实例」获取 Class 对象

3. 使用 getClass()

String s = "hello";
Class<?> clazz = s.getClass();

❗ 必须有对象实例
❗ 返回的是运行时实际类型


三、通过「类加载器」获取

4. 使用 ClassLoader

ClassLoader cl = Thread.currentThread().getContextClassLoader();
Class<?> clazz = cl.loadClass("java.lang.String");

✅ 不会触发类初始化
✅ 适合框架、插件加载


四、基本类型 & 数组的 Class

5. 基本类型

Class<?> intClass = int.class;
Class<?> voidClass = void.class;

6. 数组

Class<?> arrClass = int[].class;
Class<?> strArr = String[].class;

五、常见对比总结

方式 是否触发初始化 是否需要实例 使用场景
.class ❌ ❌ 编码期已知
forName() ✅ ❌ 动态加载
getClass() ✅ ✅ 已有对象
loadClass() ❌ ❌ 框架/容器

六、典型反射示例

Class<?> clazz = Class.forName("com.example.User");
Object obj = clazz.getDeclaredConstructor().newInstance();

如果你是想:

  • 写 框架
  • 做 动态代理
  • 理解 JVM 类加载机制

可以告诉我具体场景,我可以给更针对性的示例。

向AI问一下细节

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

AI
助
手