getclass()是object类中final方法,用于获取对象实际运行时类型,返回class对象;它不受声明类型影响,不可重写,支持类名获取、精确类型判断,但不能在null上调用且无法反映泛型信息。

getClass() 是 Object 类中定义的 final 方法,所有 Java 对象都继承它,用于在运行时获取该对象的实际类(即真实类型),返回一个 Class> 对象。
getClass 的基本用法
调用方式很简单:直接在任意对象实例上调用 getClass(),无需参数。它返回的是该对象**创建时所用的具体类**,不受声明类型影响(与静态类型无关)。
- 即使变量声明为父类或接口类型,
getClass()返回的仍是实际 new 出来的那个类 - 不能被子类重写(因为是 final),保证行为一致
- 返回的
Class对象是 JVM 在类加载时创建的唯一实例,可用于反射、类型判断等
获取类名和简单类名
通过 getClass() 返回的 Class 对象,可以方便获取类的全限定名或简单名称:
-
obj.getClass().getName()→ 返回全限定名,如"java.util.ArrayList" -
obj.getClass().getSimpleName()→ 返回不带包名的类名,如"ArrayList" -
obj.getClass().getCanonicalName()→ 返回规范名称(对普通类同getName(),对内部类/数组有区别)
用于运行时类型判断
相比 instanceof,getClass() == Xxx.class 可做**精确类型匹配**(不包含继承关系):
-
obj.getClass() == String.class→ 只有 obj 确实是 String 实例才为 true -
obj instanceof String→ 子类实例也会返回 true(但 String 是 final,此例无子类) - 常用于
equals()方法中防止跨类型比较,例如:
if (obj == null || getClass() != obj.getClass()) return false;
注意事项
getClass() 是实例方法,不能在 null 上调用 —— 否则抛出 NullPointerException。
- 想安全获取某个类型对应的 Class 对象,优先用
ClassName.class(如String.class) - 泛型擦除后无法通过
getClass()获取泛型信息(如ArrayList<string>.getClass()</string>和ArrayList<integer>.getClass()</integer>返回同一个 Class 对象) - 数组类型也支持:
new int[0].getClass()返回int[].class;new String[0].getClass()返回java.lang.String[].class
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











