我有一个java类“SampleA”。为什么“SampleA”知道它的超类是Object?
以下是我的答案,
在开发过程中,eclipse中JRE的配置会自动说每个类都有超类“对象”
在部署期间,类加载器负责说超类是“对象”。
请纠正我。
答案 0 :(得分:3)
在编译期间,如果未指定超类,则将其设置为java/lang/Object
。为了澄清,这与您将类声明为扩展Object:
public class Example extends Object {
}
所有编译器都可以节省时间,这意味着您不必在每个类中编写上述内容,这就是全部。
为了支持这一点,在执行期间,ClassLoading的验证过程将检查所有类肯定是否具有超类。只有java/lang/Object
的例外,它没有超类。
答案 1 :(得分:1)
来自Java Language Specification:
4.3.2。类对象
Object类是所有其他类的超类(第8.1.4节)。
答案 2 :(得分:1)
在编译时,编译器会判断您的类是否使用 extends 关键字扩展其他类。如果没有,它会将您的类设置为扩展 java.lang.object
您可以在使用JDK提供的 javap 工具编译课程后进行检查
答案 3 :(得分:1)
你也可以使用我试过的代码:
public class Example {
public static void main(String[] args) {
Example obj = new Example();
obj.getSuperClassName();
}
public void getSuperClassName() {
Class cls = this.getClass();
System.out.println(cls.getSuperclass());
}
}
输出:
class java.lang.Object
答案 4 :(得分:0)
JRE是运行时,类加载器在运行时出现。每个对象都引用类信息。根据JLS的默认超类是java.lang.Object。你可以在java中使用'reflection'找到类层次结构。
答案 5 :(得分:0)
我假设您询问类本身如何在运行时找出自己的超类是什么。
以下是:
public class Sample .... {
private boolean extendsObject() {
return this.getClass().getSuperclass() == Object.class;
}