出于好奇,我来写下面的方法:
public Object getObject() {
return this.getObject();
}
为什么Java允许我写这个?此方法永远不会返回任何Object
,并会产生StackOverflow Error
。
答案 0 :(得分:6)
它不应该阻止你这样做 - 这只是无底的递归,但它可能是一个常规的。编译器不需要去理解代码来猜测它是否正确定义了递归。
答案 1 :(得分:2)
这样的事情总是会导致运行时出错(而不是编译时)。在许多情况下,可以完成某些类似的(就递归而言),这些实际上是完全有效的。
答案 2 :(得分:1)
Java没有关于您的代码是否有意义的概念。如果您决定在没有退出条件的情况下调用自己的方法,它将递归,直到它用完堆栈空间。
如果没有方法调用自己的能力,就不可能进行递归。
答案 3 :(得分:0)
在一个较轻松的说明中,一个理智的开发人员扩展具有此方法的类可能会做一些有用的事情,因为该方法无论如何都是公开的。所以编译器不需要对象; - )
答案 4 :(得分:0)
1。我不认为编译器会对您的上述代码作出任何异议。我认为recursion
是runtime
书面和使用。
2。这个代码会在{{1}}期间导致问题,因此它完全是程序员编写的逻辑问题,所以它赢了不要打扰编译器,但在运行期间会抛出错误......
如果编译器本来就这么聪明......那么终结者电影本来就是现实......