什么是Java中的“运行时类”?

mic*_*ech 6 java oop

我试图了解该Object.getClass()方法的作用。

文档说,它“返回对象的运行时类”。这种解释并不能帮助我理解该术语。

是否有人对“运行时类”是什么以及getClass()它是什么做了简单的描述?

ern*_*t_k 6

只需将其理解为“具有对象类型的所有元数据的对象”。在该对象中,您可以找到在类中声明的方法、字段、类型层次结构等。这些信息通常由使用反射来检查对象/类型或运行方法的代码使用,而无需具有类在它们自己被编码时定义和编译。

可能会强调“运行时”,因为类定义可能会随着时间的推移而改变,或者对象可能被声明为超类型,而它实际上是所声明对象的子类型的实例。当加载某个类时,getClass() 方法将返回在该实例期间加载的信息。

简而言之,当您的代码运行时,VM 将以与您在 .java 文件中键入的“源”形式不同的方式定义您的类。当然,在编译之后,这些信息将被加载,并且所有元数据(如上所述)将构成他们所谓的“运行时类”。这只是一种奇特的说法“在程序运行时加载了一个类的所有元数据的对象”


And*_*ner 5

它的意思是“变量在运行时引用的实例的类”(抱歉,实际上还不清楚)。

如果你有一个参考Object,它可能是指一个Object,一个String,一个Integer...你得到的类,而不是Object

Object obj1 = new Object();
System.out.println(obj1.getClass());  // java.lang.Object

String obj2 = "";
System.out.println(obj2.getClass());  // java.lang.String

obj1 = obj2;
System.out.println(obj1.getClass());  // java.lang.String, not Object.
Run Code Online (Sandbox Code Playgroud)