458. Java 反射 - .class 语法
📅 2026/7/9 18:49:49
👁️ 阅读次数
📝 编程学习
文章目录
- 458. Java 反射 - `.class` 语法
- 1. 为什么需要 `.class`?
- 2. 基本类型的 Class
- 错误示例:
- 正确示例:
- 3. 引用类型的 Class
- 4. 多维数组的 Class
- 5. `.class` 与 `getClass()` 的对比
- 6. 总结
458. Java 反射 -.class语法
1. 为什么需要.class?
前面我们讲过:如果有一个对象实例,可以通过obj.getClass()拿到它的Class对象。
但是——如果我们手上没有对象实例,或者我们想要获取一个基本类型的Class,怎么办呢?
答案就是:使用.class语法。
2. 基本类型的 Class
对于基本类型(primitive types),不能调用getClass(),因为它们不是对象。
错误示例:
booleanb=true;Class<?>c=b.getClass();// ❌ 编译错误编译器提示:基本类型不可被解引用。
正确示例:
Class<?>c=boolean.class;System.out.println("class: "+c);输出:
class:boolean✅总结:
boolean.class返回的就是Class对象,表示boolean这种类型本身。- 同理,你可以用
int.class、char.class、double.class,等等。
3. 引用类型的 Class
.class不仅适用于基本类型,也适用于引用类型。
Class<?>c=java.io.PrintStream.class;System.out.println("class: "+c);输出:
class:classjava.io.PrintStream这里的c就是PrintStream类型的 Class 对象。
在反射场景中,这非常有用:
- 无需对象实例
- 无需
Class.forName("全限定名") - 编译期就能保证类型存在
4. 多维数组的 Class
数组在 Java 中也是对象,所以也可以用.class来获取Class。
Class<?>c=int[][][].class;System.out.println("class: "+c);输出:
class:class[[[I这里有几个关键点:
[[[I是 JVM 的内部表示(Type Descriptor)- 每一个
[表示一维数组,所以[[[I表示int的三维数组 I表示int类型(常见的缩写还有:Z=boolean,B=byte,C=char,D=double等)
5..class与getClass()的对比
| 用法 | 适用场景 | 示例 |
|---|---|---|
obj.getClass() | 已有实例,运行时确定 | "hello".getClass()→String.class |
TypeName.class | 已知类型,编译期确定 | String.class,int.class |
Class.forName("全限定名") | 运行时动态加载 | Class.forName("java.util.HashMap") |
⚡口诀:
- 编译期有类型→ 用
.class - 运行时有对象→ 用
obj.getClass() - 运行时只有类名字符串→ 用
Class.forName()
6. 总结
.class是获取类型对应的 Class 对象的简洁方式- 对基本类型必须用
.class(因为没有对象实例) .class也能用于数组、接口、枚举等所有类型- JVM 内部使用特殊的描述符来表示数组类型(
[I,[[Ljava.lang.String;等)
编程学习
技术分享
实战经验