java中无参构造函数 java和默认构造函数 java是一样的吗?

JavaSE中String的无参构造函数 java的问题 [问题點数:20分,结帖人qq_]

文档中写着无需使用此构造方法这是为什么?在这里饶不出来请大神简单明了的解释,非常感谢

匿名用户不能发表囙复!

抄袭、复制***以达到刷声望汾或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号是时候展现真正的技术了!

如果你有一个没有显式默认构造函数 java的超类A,
子类B扩展A,没有明确的默认构造函数 java,

并且在驱动程序类的主要方法中
将创建一个默认构造函数 java,它将调用Object类的默认构造函数 java,对吗

根据教程,将生成B的默认构造函数 java,构造函数 java将调用超类的无参构造函数 java,后者将依次调用Object中的构造函数 java.

那么什么时候超类没有无参数构造函数 java呢?

默认构造函数 java由编译器在您未提供时定义.

将在某种程度上由编译器表示为:

由于我对A的定义没有定义明确的构造函数 java.

在上面的示例中,A隱式地扩展了Object,并且当它执行super()时,编译器会自动调用Object的默认构造函数 java.任何可能扩展A的类都是如此,例如:

将由编译器实现有点像:

你可以看到最終将链接Object的默认构造函数 java,然后是A的默认构造函数 java,最后是B的默认构造函数 java.

&GT那么什么时候超类没有无参数构造函数 java呢

当您明确定义一个时,它將没有no-arg构造函数 java.例如,如果我将A的定义更改为

然后A不再有默认构造函数 java,我不能再这样做了

现在B必须通过明确说明要使用哪一个来明确地从其父类链接正确的构造函数 java.例如

事实上,您可以使用JDK附带的工具来演示所有这些. JDK bin目录中有一个名为javap的程序.这是Java Decompiler工具,它允许您查看编译器生成的玳码.

您可以编译我的示例然后反编译它们以查看生成的代码,例如

这清楚地表明编译器添加了一个默认构造函数 java.

您可以反汇编类以查看字节玳码.

它将显示它如何调用父类的默认构造函数 java

如果我向A的构造函数 java添加一个默认参数,您将看到编译器不再提供默认构造函数 java,它只提供我明確定义的那个:

这表明您在原始问题中引用的规范中所读到的内容是正确的.

参考资料

 

随机推荐