getclass() 是 java 中用于获取对象实际运行时类的动态方法,返回 class 对象,支持获取类名、包名及类型判断,但不可用于 null 且不保留泛型信息。

getClass() 是 Java 中每个对象都继承自 Object 类的方法,用于在运行时获取该对象的实际类(即具体实例化类型),返回一个 Class 对象。
getClass 返回的是实际运行时的类,不是声明类型
即使变量声明为父类或接口类型,getClass() 仍返回对象**真正创建时的类**。例如:
-
Object obj = new ArrayList();→obj.getClass()返回class java.util.ArrayList -
List<string> list = new LinkedList();</string>→list.getClass()返回class java.util.LinkedList
常用操作:获取类名、包名、判断类型
拿到 Class 对象后,可进一步提取信息或做类型检查:
-
clazz.getName():返回全限定类名(如"java.util.ArrayList") -
clazz.getSimpleName():返回简单类名(如"ArrayList") -
clazz.getPackage().getName():获取所在包名 -
clazz == SomeClass.class或clazz.equals(SomeClass.class):精确判断是否为某类(注意不用==比较不同类加载器加载的类) -
SomeClass.class.isAssignableFrom(clazz):判断是否是某类或其子类(更安全的类型检查方式)
注意事项和常见误区
getClass() 只能用于**非 null 对象**,对 null 调用会抛出 NullPointerException;它无法反映泛型类型擦除后的信息(如 ArrayList<string></string> 和 ArrayList<integer></integer> 运行时都返回同一个 Class 对象);也不能替代 instanceof 做安全的类型判断(因为不处理 null 且不支持向上转型检查)。
与 getClass() 相关的替代方式
如果目标是类型检查或转换,通常优先用 instanceof + 强转;若需反射操作(如获取字段、方法),才真正需要 Class 对象。静态获取类信息用 ClassName.class 更高效,无需实例;而 getClass() 是动态、基于实例的,适合多态场景下探查真实类型。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











