在 Java 中,**获取 Class 对象(反射入口)**有多种方式,下面按常见场景给你系统梳理一下。
.class 语法(编译期可知)Class<?> clazz = String.class;
✅ 最简单、最安全
✅ 不会触发类初始化(只是获取 Class 对象)
Class.forName()(最常用)Class<?> clazz = Class.forName("java.lang.String");
✅ 运行时根据类名加载
✅ 会触发类初始化(静态代码块会执行)
可指定类加载器:
Class<?> clazz = Class.forName(
"com.example.User",
true,
getClass().getClassLoader()
);
getClass()String s = "hello";
Class<?> clazz = s.getClass();
❗ 必须有对象实例
❗ 返回的是运行时实际类型
ClassLoaderClassLoader cl = Thread.currentThread().getContextClassLoader();
Class<?> clazz = cl.loadClass("java.lang.String");
✅ 不会触发类初始化
✅ 适合框架、插件加载
Class<?> intClass = int.class;
Class<?> voidClass = void.class;
Class<?> arrClass = int[].class;
Class<?> strArr = String[].class;
| 方式 | 是否触发初始化 | 是否需要实例 | 使用场景 |
|---|---|---|---|
.class |
❌ | ❌ | 编码期已知 |
forName() |
✅ | ❌ | 动态加载 |
getClass() |
✅ | ✅ | 已有对象 |
loadClass() |
❌ | ❌ | 框架/容器 |
Class<?> clazz = Class.forName("com.example.User");
Object obj = clazz.getDeclaredConstructor().newInstance();
如果你是想:
可以告诉我具体场景,我可以给更针对性的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。