getclass()用于获取对象实际运行时类型对应的class对象,不受声明类型影响,可准确反映多态真实类型,对null调用抛nullpointerexception,常用于反射、类型判断和调试。

getClass() 是 Object 类中定义的一个 final 方法,用于在运行时获取当前对象的实际类(即真实类型)对应的 Class 对象。
为什么用 getClass() 而不是直接写类名.class?
因为 getClass() 返回的是对象**实际创建时的类**,不受变量声明类型影响,能准确反映多态下的真实类型:
- 声明为父类或接口,但 new 的是子类实例 →
getClass()返回子类的Class -
String s = "abc"; s.getClass()返回String.class,不是Object.class - 对 null 调用会抛出
NullPointerException(不能对 null 使用)
基本用法示例
直接调用即可:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
Object obj = new ArrayList(); Class> clazz = obj.getClass(); // 返回 ArrayList.class System.out.println(clazz.getName()); // java.util.ArrayList
泛型安全写法(推荐):
String str = "hello"; Class<string> strClass = str.getClass(); // 编译期可推断为 Class<string></string></string>
和 getClass().getName()、getSimpleName() 的区别
它们都来自 Class 对象,但返回内容不同:
-
getClass().getName():返回全限定名,如"java.util.HashMap" -
getClass().getSimpleName():只返回类名,如"HashMap" -
getClass().getCanonicalName():返回规范名(对内部类等更严谨)
常见用途
- 反射:获取构造器、方法、字段前,先通过
getClass()得到目标类的Class对象 - 类型判断:
if (obj.getClass() == String.class)(注意:一般优先用instanceof) - 日志/调试:打印对象真实类型,排查多态或代理导致的类型混淆
- 序列化/反序列化框架中识别运行时类型
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










