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;
}
}
为什么" [正常]其余的代码"不执行和" [除了]其余代码"不执行?请解释一下。
答案 0 :(得分:2)
testNormal
。来自0
的{{1}}存储在某处,return 0
块中的代码运行,然后返回该存储的值。
finally
。抛出异常。 testException
中的代码已运行。然后运行catch
块中的代码。然后程序控制从finally
继续,并返回System.out.println
。
更有趣的是-1
本身包含finally
的情况。在这种情况下,将返回return
块中的返回值,并且将丢弃先前finally
遇到的任何存储值。