一个类怎么知道它的超类是Object?

时间:2012-03-28 11:17:57

标签: java

我有一个java类“SampleA”。为什么“SampleA”知道它的超类是Object?

以下是我的答案,

  1. 在开发过程中,eclipse中JRE的配置会自动说每个类都有超类“对象”

  2. 在部署期间,类加载器负责说超类是“对象”。

  3. 请纠正我。

6 个答案:

答案 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;
        }