4

出于好奇,我开始编写以下方法:

public Object getObject() {
    return this.getObject();        
}

为什么Java允许我写这个?此方法永远不会返回任何Object内容,并且会导致StackOverflow Error.

4

5 回答 5

5

它不应该阻止你这样做——这只是无底递归,但它可能是一个普通的递归。编译器不需要去理解代码来猜测它是否正确定义了递归。

于 2012-09-09T13:25:39.363 回答
2

像这样的事情总是在运行时(而不是编译时)导致错误。在许多情况下,可以完成类似的事情(就递归而言),这本来是完全有效的。

于 2012-09-09T13:28:49.430 回答
1

Java 不知道您的代码是否有意义。如果您决定要让一个方法在没有退出条件的情况下自行调用,它将递归,直到堆栈空间用完。

没有方法调用自身的能力,递归是不可能的。

于 2012-09-09T13:28:38.103 回答
0

稍微轻松一点,扩展具有此方法的类的理智开发人员可能会做一些有用的事情,因为该方法无论如何都是公共的。所以编译器不需要反对;-)

于 2012-09-09T13:27:38.160 回答
0

1.我认为编译器不会反对您对上述代码进行许可..我认为它是如何recursion编写和使用的。

2.这里这段代码在运行时会出问题runtime完全是程序员写的逻辑有问题,不会打扰编译器,但是运行时会报错……

如果编译器能这么聪明......那么终结者电影就会接近现实......

于 2012-09-09T14:19:29.993 回答