为什么这种方法不会永远重复?

时间:2014-02-17 06:55:32

标签: java

当我开心的时候,我发现了一些奇怪的方法

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();
    }
}

此代码中没有例外,但它不会重复

3 个答案:

答案 0 :(得分:7)

此代码无法编译,因为您在没有类实例的情况下从static方法调用非static方法。

一旦你解决了这个问题,你最终会得到无限的递归。

在典型的JVM上,这会导致代码最终耗尽堆栈空间。在优化尾递归的JVM上,代码将等同于无限循环。

答案 1 :(得分:1)

如果您创建了mm1 static ,代码将会编译,您将获得无限递归,因为:

m中,您拨打m1,在m1拨打m,在m拨打m1,然后拨打{{1}你拨打m1并在m拨打m和...

答案 2 :(得分:0)

如果制作方法static或正确调用它,它将永远重复。由于这些方法(在编辑之后)static现在它将永远重复。