我尝试了解Object.getClass()
方法的作用。
documentation表示它"返回对象的运行时类。"这个解释并不能帮助我理解这个术语。
有人简单描述"运行时类"是getClass()
是什么?
答案 0 :(得分:5)
它表示"变量在运行时引用的实例的类" (对不起,如果那不是真的更清楚)。
如果您引用Object
,则可以引用Object
,String
,Integer
...您获得该类,而不是{ {1}}。
Object
答案 1 :(得分:4)
您编写的每个课程都有很多元数据。该元数据由类名,其字段,方法,基类,它实现的接口等组成。
有时您可能需要在运行时从代码中访问该元数据。
为此,您可以使用任何对象并调用其getClass()
方法。您将收到一个包含上述元数据的Class
对象。
答案 2 :(得分:2)
将其理解为“具有对象类型的所有元数据的对象”。在该对象中,您可以找到在类中声明的方法,字段,类型层次结构等。 此信息通常由代码使用,该代码使用反射来检查对象/类型或运行方法,而无需在编码时自定义和编译类。
“Runtime”可能会被强调,因为类定义可能会随着时间的推移而改变,或者对象可能被声明为超类型,而它实际上是声明的类型的子类型的实例。当加载某个类时,它就是在该实例中加载的信息,它将由getClass()方法返回。
简而言之,当您的代码运行时,VM将以与您在.java文件中键入的“源”表单不同的方式定义您的类。当然,在编译之后,该信息将被加载,并且所有元数据(如上所述)将构成他们称之为“运行时类”的信息。 这只是一种奇特的方式,可以说“一个对象,其中包含有关在程序运行时加载的类的所有元数据”
答案 3 :(得分:2)
对象的类可以在运行时更改。请考虑以下示例:
package demo;
public class Main {
public static class A {
public int a=0;
}
public static class B extends A {
public int b=1;
}
public static void main(String[] args) {
Main.A b=new Main.A();
System.out.println(b.getClass().toString());
b=new Main.B();
System.out.println(b.getClass().toString());
}
}
b.getClass()的输出在运行时发生了变化。