getclass()是object类中final方法,返回对象实际运行时的class类型,用于反射、类型判断等;它区分编译时与运行时类型,不能在null上调用,数组也支持。

getClass() 是 Object 类中定义的一个 final 方法,所有 Java 类(包括数组)都继承自 Object,因此任何对象实例都能直接调用它,用于获取该对象**实际运行时的类对象(Class> 类型)**。
getClass 的基本用法
它不需要参数,返回当前对象所属的具体类(不是声明类型,而是真实类型),常用于反射、类型判断、泛型擦除后的类型检查等场景。
- 调用方式简单:直接在对象引用后加
.getClass() - 返回值是
Class>,可进一步获取类名、父类、方法、字段等元信息 - 即使变量声明为父类或接口类型,
getClass()返回的仍是实际创建的对象类型
区分编译时类型和运行时类型
这是理解 getClass() 的关键。例如:
Object obj = new ArrayList<string>(); System.out.println(obj.getClass()); // 输出:class java.util.ArrayList System.out.println(obj.getClass().getName()); // "java.util.ArrayList"</string>
虽然 obj 声明为 Object(编译时类型),但运行时它是一个 ArrayList 实例,所以 getClass() 返回的是 ArrayList.class。
常见用途与注意事项
-
安全的类型比较:用
obj.getClass() == String.class比obj instanceof String更严格(不匹配子类) -
获取类名:推荐用
obj.getClass().getSimpleName()或.getCanonicalName(),避免硬编码字符串 -
不能在 null 上调用:因为
getClass()是实例方法,对null调用会抛出NullPointerException -
数组也支持:如
new int[5].getClass()返回class [I(JVM 内部表示 int 数组)
与 getClass() 相关的 Class 对象操作
拿到 Class 对象后,可做很多反射操作:
-
clazz.getDeclaredMethods():获取所有声明方法(含 private) -
clazz.getSuperclass():获取直接父类 -
clazz.getInterfaces():获取实现的接口 -
clazz.isInterface()/.isArray()/.isPrimitive():判断类型性质
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











