我最近安装了字节码大纲 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/