java - 不扩展 java.lang.Object 的类

标签 java inheritance compiler-construction

当您在 Java 中创建用户定义的类时,您不会将其指定为扩展对象。但是这个类仍然是一个对象。这是如何运作的? javac 或 JVM 如何将一个类的所有属性注入(inject)到用户定义的类中?

最佳答案

如果您实际上没有编写extends Object,编译器会为您插入它。

编辑:显然,我对是否确实在插入代码造成了一些困惑。我自己也不是很确定,所以我做了一个小实验:在文件 test.java 中创建以下类:

public class test {}

然后编译,然后运行

javap -c test

反汇编字节码。看看结果是什么:

Compiled from "test.java"
public class test extends java.lang.Object{
public test();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."":()V
   4:   return

}

所以是的,编译器确实实际上将 extends java.lang.Object(或等效的字节码)插入到类中。

关于java - 不扩展 java.lang.Object 的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1345043/

相关文章:

java - 我应该如何在作为 gwt 组件的对象上设置自定义样式?

c++ - 在派生类中复制类似构造函数的基类实例复制

algorithm - 解析器解释器编程

c - Flex 无法正确计算多行注释的行数

java - 无法通过 com.sun.org.apache.xerces.internal.impl.msg.XMLSchemaMessages 加载任何资源包

java - JSOUP 未解析的编译 : ignoreHttpErrors() is undefined for the type Connection

java - 使用泛型参数覆盖方法

c++ - 为什么我不能通过模板访问子类型?

c++ - 使用递归的中缀到前缀转换

java - SupportMapFragment 在主线程上加载并卡住界面(忽略getMapAsync)