Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java .class文件没有';t显示对父对象的调用';s构造函数_Java_Constructor - Fatal编程技术网

Java .class文件没有';t显示对父对象的调用';s构造函数

Java .class文件没有';t显示对父对象的调用';s构造函数,java,constructor,Java,Constructor,我试图理解java中的构造函数。我读到,如果我没有在java文件中提供构造函数,编译器将为我插入一个(默认为no-args-one)。我编写了一个简单的java文件ConstructorTest.java,如下所示 public class ConstructorTest{ } 然后我编译了它,使用Cavaj,我可以看到类文件的内容,如下所示 public class ConstructorTest { public ConstructorTest() { } } 我

我试图理解java中的构造函数。我读到,如果我没有在java文件中提供构造函数,编译器将为我插入一个(默认为no-args-one)。我编写了一个简单的java文件ConstructorTest.java,如下所示

public class ConstructorTest{
}
然后我编译了它,使用Cavaj,我可以看到类文件的内容,如下所示

public class ConstructorTest
{
    public ConstructorTest()
    {
    }
}
我的问题是,对于下面的语句,我看不到同样的情况,“如果您键入自己的构造函数,并且没有键入对
super()
this()
的调用,编译器将插入对
super()
的无参数调用,作为构造函数中的第一条语句(摘自
oracleoca/OCP
java7学习指南)”

我的java文件:

public class ConstructorChild extends ConstructorTest{

public ConstructorChild(){

}

}
我的类文件:

public class ConstructorChild extends ConstructorTest
{

    public ConstructorChild()
    {
    }
}

为什么要调用
super()编译时编译器不会插入
?感谢您的帮助。

Erwin Bolwidt是对的。顺便说一句,java字节码中的构造函数总是被命名为
,而静态块称自己为
。另外请注意,后者可能会出现多次,JVM会按出现的顺序调用它们加载类。

Erwin Bolwidt是正确的。顺便说一句,java字节码中的构造函数总是被命名为
,而静态块称自己为
。还要注意,后者可能会出现多次,JVM会在加载类时按出现的顺序调用所有构造函数。

您应该告诉我们如何“读取”
.class
文件您显示的不是.class文件,而是另一个Java源文件。您能更清楚地说明您的问题吗?您好@ErwinBolwidt,当我提到class文件时,它是我在.class文件中看到的内容,当使用Cavaj打开时。我的问题是为什么编译器没有插入“super()”作为编译文件的第一行,当我自己在java文件中提供构造函数时,如第二个示例.Hi@RC.所示,我使用Cavaj(免费java反编译器之一)打开.class文件。@Chetan那么答案很简单:因为Cavaj不显示对
super()的隐式调用
,因为它是可选的。它是可选的,因为编译器会自动插入它。如果你真的想知道发生了什么,你需要使用
javap
并查看字节码(你需要研究一下字节码),你应该告诉我们你是如何“读取”的
.class
文件您显示的不是.class文件,而是另一个Java源文件。您能更清楚地说明您的问题吗?您好@ErwinBolwidt,当我提到class文件时,它是我在.class文件中看到的内容,当使用Cavaj打开时。我的问题是为什么编译器没有插入“super()”作为编译文件的第一行,当我自己在java文件中提供构造函数时,如第二个示例.Hi@RC.所示,我使用Cavaj(免费java反编译器之一)打开.class文件。@Chetan那么答案很简单:因为Cavaj不显示对
super()的隐式调用
,因为它是可选的。它是可选的,因为编译器会自动插入它。如果你真的想知道发生了什么,你需要使用
javap
并查看字节码(你需要研究一下字节码)