java中获取对象全限定名应调用obj.getclass().getname(),返回包名加类名的字符串,如"java.util.arraylist";该方法基于运行时类型,需确保对象非null,不可用class.forname()替代。

Java 中 getClass() 方法返回当前对象运行时的 Class 对象,再调用 getName() 即可获取类的全限定名(即包名 + 类名)。
getClass() 返回 Class 对象
每个 Java 对象都继承自 Object,因此都具备 getClass() 方法。它返回的是该实例实际所属类的 Class 对象,不是声明类型,而是运行时类型。
- 对于普通对象:
new ArrayList<string>().getClass()</string>返回java.util.ArrayList的Class实例 - 对于子类实例:
new HashMap().getClass()返回java.util.HashMap,即使变量声明为Map
用 getName() 获取全限定名
Class.getName() 返回字符串形式的全限定类名,包含完整包路径,例如 "java.util.ArrayList"。
- 这是最常用、最直接的方式:
obj.getClass().getName() - 注意不要和
getSimpleName()混淆——后者只返回类名(如"ArrayList"),不含包名 - 也不要用
getCanonicalName()替代,它对内部类或数组等有特殊处理,一般场景下getName()更可靠
实际使用示例
以下代码片段展示了典型用法:
String str = "hello"; System.out.println(str.getClass().getName()); // 输出:java.lang.String List<integer> list = new LinkedList(); System.out.println(list.getClass().getName()); // 输出:java.util.LinkedList </integer>
如果对象为 null,调用 getClass() 会抛出 NullPointerException,使用前需确保非空。
替代方式:Class.forName() 不适用于此场景
Class.forName("包名.类名") 是根据字符串加载类,需要已知类名且类必须在类路径中;而 getClass() 是运行时动态获取,二者目的不同,不可互换。
想获取全限定名,始终优先用 obj.getClass().getName() ——简洁、准确、无需反射配置。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











