解释代码执行的差异

时间:2016-04-11 14:33:09

标签: java try-catch

public class Main {

    public static void main(String[] args) {
        System.out.println("Normal: " + testNormal());
        System.out.println("Exception: " + testException());
    }

    public static int testNormal() {
        try {
            // no exception
            return 0;
        } catch (Exception e) {
            System.out.println("[normal] Exception caught");
        } finally {
            System.out.println("[normal] Finally");
        }
        System.out.println("[normal] Rest of code");
        return -1;
    }

    public static int testException() {
        try {
            throw new Exception();
        } catch (Exception e) {
            System.out.println("[except] Exception caught");
        } finally {
            System.out.println("[except] Finally");
        }
        System.out.println("[except] Rest of code");
        return -1;
    }

}

为什么" [正常]其余的代码"不执行和" [除了]其余代码"不执行?请解释一下。

1 个答案:

答案 0 :(得分:2)

  1. testNormal。来自0的{​​{1}}存储在某处,return 0块中的代码运行,然后返回该存储的值。

  2. finally。抛出异常。 testException中的代码已运行。然后运行catch块中的代码。然后程序控制从finally继续,并返回System.out.println

  3. 更有趣的是-1本身包含finally的情况。在这种情况下,将返回return块中的返回值,并且将丢弃先前finally遇到的任何存储值。