当我开心的时候,我发现了一些奇怪的方法
public class T {
static void m() {
System.out.println("M");
m1();
}
static void m1() {
System.out.println("MM");
m();
}
public static void main(String[] args) {
m();
}
}
此代码中没有例外,但它不会重复
答案 0 :(得分:7)
此代码无法编译,因为您在没有类实例的情况下从static
方法调用非static
方法。
一旦你解决了这个问题,你最终会得到无限的递归。
在典型的JVM上,这会导致代码最终耗尽堆栈空间。在优化尾递归的JVM上,代码将等同于无限循环。
答案 1 :(得分:1)
如果您创建了m
和m1
static ,代码将会编译,您将获得无限递归,因为:
在m
中,您拨打m1
,在m1
拨打m
,在m
拨打m1
,然后拨打{{1}你拨打m1
并在m
拨打m
和...
答案 2 :(得分:0)
如果制作方法static
或正确调用它,它将永远重复。由于这些方法(在编辑之后)static
现在它将永远重复。