java - 真的有必要调用 java.lang.Object 构造函数吗?

标签 java

我最近安装了字节码大纲 Eclipse 插件,发现我的测试类

public class Test {
}

调用 java.lang.Object 的构造函数

public class Test {
  public <init>()V
   L0
    LINENUMBER 15 L0
    ALOAD 0
    INVOKESPECIAL java/lang/Object.<init>()V
    RETURN
   L1
    LOCALVARIABLE this LTest; L0 L1 0
    MAXSTACK = 1
    MAXLOCALS = 1
}

INVOKESPECIAL java/lang/Object.<init>() V表示调用java.lang.Object的构造函数

这有什么意义吗?通过java.lang.Object字节码判断

  public <init>()V
   L0
    LINENUMBER 37 L0
    RETURN
    MAXSTACK = 0
    MAXLOCALS = 1

它什么都不做。刚回来。

最佳答案

它必须满足 section 4.9.2关于结构约束的 JVM 规范:

Each instance initialization method (§2.9), except for the instance initialization method derived from the constructor of class Object, must call either another instance initialization method of this or an instance initialization method of its direct superclass super before its instance members are accessed.

现在,对于 Object 的直接子类的类,规则可以放宽 - 但我怀疑它是否有任何好处,并且会不优雅(IMO)。如果 Object 构造函数确实在未来执行了一些初始化怎么办?您真的想要一个允许您绕过它的规范吗?

关于java - 真的有必要调用 java.lang.Object 构造函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13766932/

相关文章:

java - 如何返回 ArrayList <Integer>?

java - 排序后的 map 不允许删除

java无法比较字符串

java - Spring 3.1 Type Level RequestMapping 和逻辑 View 名称

java - 我如何有效地禁止用户使用 spring web 应用程序

java - 调整 JFrame 及其内部所有内容的大小

java - NeighboringCellInfo、CID 和 LAC 的空问题

java - tomcat 无法获取 ServletContext.getContextPath()

java - Java如何对数据集进行排序

java - 打印小程序 GUI