好奇心から、私は次の方法を書くようになりました:
public Object getObject() {
return this.getObject();
}
なぜJavaでこれを書くことができるのでしょうか?このメソッドは何も返さずObject
、結果としてStackOverflow Error
。
好奇心から、私は次の方法を書くようになりました:
public Object getObject() {
return this.getObject();
}
なぜJavaでこれを書くことができるのでしょうか?このメソッドは何も返さずObject
、結果としてStackOverflow Error
。
それはあなたがそれをするのを止めるべきではありません-これはただ底なしの再帰です、しかしそれは通常のものであったかもしれません。コンパイラーは、適切に定義された再帰であるかどうかを推測するために、コードを理解する必要はありません。
このようなものは、(コンパイル時ではなく)実行時に常にエラーを引き起こします。(再帰に関して)同様のことが行われ、完全に有効であった可能性のある多くの例があります。
Javaには、コードが意味をなすかどうかの概念がありません。終了条件なしでメソッド自体を呼び出すことにした場合、スタックスペースがなくなるまでメソッドは繰り返されます。
メソッドが自分自身を呼び出す機能がなければ、再帰は不可能です。
簡単に言えば、このメソッドはとにかくパブリックであるため、このメソッドを持つクラスを拡張する正気の開発者は何か便利なことをするかもしれません。したがって、コンパイラは反対する必要はありません;-)
1.コンパイラーは、上記のコードにクリアランスを与えることに異議を唱えることはないと思いますrecursion
。
2.ここで、このコードは中runtime
に問題を引き起こします。したがって、プログラマーが作成したロジックに完全に問題があるため、コンパイラーに迷惑をかけることはありませんが、実行時にエラーがスローされます......
コンパイラがこれほど賢かったとしたら.....ターミネーターの映画はほぼ現実のものだったでしょう.....