我试图理解java中的构造函数。我读过如果我在java文件中没有提供构造函数,编译器会为我插入一个(默认的no-args one)。我写了一个简单的java文件ConstructorTest.java,如下所示。
public class ConstructorTest{
}
然后我编译它并使用Cavaj,我可以看到类文件内容,如下所示。
public class ConstructorTest
{
public ConstructorTest()
{
}
}
我的问题是我在下面的语句中看不到相同的情况,“如果你键入自己的构造函数并且不输入对super()
或this()
的调用,编译器将插入对super()
的无参数调用,作为构造函数中的第一个语句(摘自ORACLE OCA/OCP
Java 7学习指南)“。
我的java文件:
public class ConstructorChild extends ConstructorTest{
public ConstructorChild(){
}
}
我的班级档案:
public class ConstructorChild extends ConstructorTest
{
public ConstructorChild()
{
}
}
为什么编译时编译器没有插入对super()
的调用?感谢任何帮助。
答案 0 :(得分:0)
Erwin Bolwidt是对的。顺便说一句,java字节代码中的构造函数始终命名为<init>
,而静态块自称为<clinit>
。另请注意,后者可以出现多次,并且JVM将按加载类的外观顺序调用所有这些。