gpt4 book ai didi

java - 为什么这个递归构造函数不会导致编译时错误?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:44:15 25 4
gpt4 key购买 nike

考虑以下代码

class ConstructorDemo2{
ConstructorDemo2(){
this(1);
}
ConstructorDemo2(int i){
this();
}
public static void main(String[] args){
new ConstructorDemo2();
}
}

Kathy Sierra 的 SCJP6 书第 144 页说像这样的代码可能未被发现并导致 StackOverflowError。但与此同时,我们知道子类构造函数总是必须使用 super() [编译器默认提供]调用父类(super class)构造函数但在下面的代码示例中,两个构造函数都调用了 this()(互相调用)。
它确实在我的 OpenJDK 编译器中显示错误 error: recursive constructor invocation,但 Kathy Sierra 的书说这样的代码可能不会被编译器检测到,并会在运行时抛出异常。

因此,如果在 SCJP/OCJP 考试中向我展示这样的代码示例,并询问它是否可以编译,答案会是什么?好像有点暧昧

最佳答案

如有疑问,请阅读 JLS 的内容不得不说:

8.8.7. Constructor Body

...

It is a compile-time error for a constructor to directly or indirectly invoke itself through a series of one or more explicit constructor invocations involving this.

因此,您的代码不应通过编译。如果某些编译器没有检测到此错误,则它不符合 Java 语言规范。

关于java - 为什么这个递归构造函数不会导致编译时错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28958123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com