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。