HOWTO · Java
在 Java 中获取对象的运行时类
了解 Java 没有 typeof 运算符,以及如何使用 getClass() 获取对象的运行时类,并检查包装类对象。
本页内容
Java 没有 typeof 运算符。要查看对象的运行时类,可以对非 null 的对象引用调用 getClass()。int 和 char 等基本类型值不是对象,不能直接调用此方法;若要使用这种方式检查基本类型值,需先将其装箱。Java 还有其他处理类型信息的方式,因此当你需要查看现有对象的实际类时,getClass() 很有用。
有关类型与运算符的问题在 Java 教程 中归在一组,其中也包括 Java 如何回答 typeof 问题。
在 Java 中获取对象的运行时类
getClass() 由 Object 定义,返回一个描述接收者运行时类的 Class 对象。例如,String 引用可以直接调用该方法。打印这个 Class 对象时会包含包名,例如 class java.lang.String。
下面这个完整的 Java 程序会打印字符串及其引用对象的类:
class RuntimeClassExample {
public static void main(String[] args) {
String message = "Hello";
System.out.println(message);
System.out.println("Class: " + message.getClass());
}
}
其标准输出为:
Hello
Class: class java.lang.String
如果起始值是基本类型,请先将它赋给 Integer 或 Character 等包装类对象,再调用 getClass()。装箱会把基本类型值转换为对应的包装类对象。调用该方法时,引用必须指向一个对象;null 引用没有可供调用方法的接收者。
在 Java 中获取包装类对象的运行时类
包装类让你可以检查表示基本类型值的对象。下面的示例使用 Integer 和 Character。getClass() 会识别每个对象的运行时类,而 getSimpleName() 返回不带包限定部分的类名。
class WrapperClassExample {
public static void main(String[] args) {
Integer count = 20;
Character letter = 'G';
System.out.println("Integer class: " + count.getClass());
System.out.println("Character class: " + letter.getClass());
System.out.println("Integer simple name: " + count.getClass().getSimpleName());
System.out.println("Character simple name: " + letter.getClass().getSimpleName());
}
}
这些调用显示的类名分别是 java.lang.Integer 和 java.lang.Character;它们的简单类名分别是 Integer 和 Character。