2026/7/9 18:27:09

458. Java 反射 - .class 语法

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