でもStackOverflowの後に正常に動作コード - どのように?

ジョーカー:

私の理解、次のコードを印刷する必要があり0、スタックがいっぱいであるため、出力として、それはすぐに方法から抜け出す必要があります。

しかし、私はそれが印刷され、次のコード実行したときに100第一ケースとプリントのため1第二ケースの場合:

class ErrorAndException {
        public static int callStackOverflow() {
            try {
                callStackOverflow();
                return 100;
            } catch (Error e) {
                System.out.println(e);
                return 0;
            } finally {
            }
        }

        public static void main(String[] args) {
            System.out.println(callStackOverflow());
        }
    }

ケース - 2

class ErrorAndException {
            public static int callStackOverflow() {
                try {
                    callStackOverflow();
                    return 100;
                } catch (Error e) {
                    System.out.println(e);
                    return 0;
                } finally {
                           return 1
                }
            }

        public static void main(String[] args) {
            System.out.println(callStackOverflow());
        }
    }

私はこの動作を理解するのに役立ちます。

彼らは次のとおりでした:

最後の呼び出しにのみcallStackOverflow()(ここで1 StackOverflowErrorスローされます)を返します0しかし、とき、それは、に以前の呼び出しを返しcallStackOverflow()、すべてのリターン100あなたmainの最初の呼び出しによって返された値だけ方法プリントをcallStackOverflow()あります、100

あなたがしたい場合0に返されるmain方法、callStackOverflow()再帰呼び出しによって返された値を返すために必要があります:

public static int callStackOverflow() {
    try {
        return callStackOverflow();
    } catch (Error e) {
        System.out.println(e);
        return 0;
    } finally {
    }
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=315523&siteId=1