定义
因为Java有多态现象,所以一个引用数据类型的变量的编译时类型与运行时类型可能不一致,因此如果需要查看这个变量实际指向的对象的类型,需要用getClass()方法
Java中的getClass()方法是Object类中的方法,用于返回一个对象所属的类的Class对象。
Class类是Java反射机制的核心类之一,它提供了许多方法来获取类的信息,如类名、父类、接口、构造方法、方法、字段等。
通过getClass()方法,我们可以获取一个对象的Class对象,从而获取该对象所属类的相关信息。
public static void main(String[] args) {
Object obj = new Person();
System.out.println(obj.getClass());//运行时类型
}
结果:
class com.x.java.Person
一些常用的方法
通过 getClass() 方法获取的是一个 Class 类型的对象,该对象包含了当前对象的类型信息。下面是一些 Class 类型对象常用的方法:
- getName():获取类的完整名称,包括包名,返回一个字符串类型的值。
- getSimpleName():获取类的简单名称,不包括包名,返回一个字符串类型的值。
- getModifiers():获取类的修饰符,返回一个整数值,可以通过 Modifier 类的静态方法进行解析。
- getPackage():获取类所在的包,返回一个 Package 对象。
- getSuperclass():获取当前类的父类,返回一个 Class 对象。
- getInterfaces():获取当前类实现的接口,返回一个 Class 对象数组。
- newInstance():创建当前类的一个新实例,要求当前类必须有一个无参构造方法。
- isAssignableFrom(Class<?> cls):判断当前类是否可以赋值给参数 cls 表示的类。
public class Main {
public static void main(String[] args) {
String str = "Hello, World!";
Class cls = str.getClass();
System.out.println("Class name: " + cls.getName());
System.out.println("Simple name: " + cls.getSimpleName());
System.out.println("Superclass: " + cls.getSuperclass().getName());
Class[] interfaces = cls.getInterfaces();
System.out.print("Interfaces: ");
for (Class c : interfaces) {
System.out.print(c.getName() + " ");
}
}
}
结果:
Class name: java.lang.String
Simple name: String
Superclass: java.lang.Object
Interfaces: java.io.Serializable java.lang.Comparable java.lang.CharSequence