第一种情况是;
public class TestException {
public static void main(String[] args) {
System.out.println(getVal());
}
public static int getVal() {
int x = 1;
int y = 0;
try {
x = y + 3;
System.out.println(x / y);
} catch (Exception e) {
x++;
return x;
} finally {
x++;
}
return x;
}
}
说明:
如上图,执行的顺序是从1~7。不会执行最后的那个return语句的。
解说:当程序走到第3步的时候,这时候因为y = 0而抛出异常,这时候程序会递进到catch里面,因为catch里面有return语句,所以此时在catch里面的return语句已经形成了返回路径了:return 4。这时候catch发现finally里面还有可执行的语句,就继续去finally里面进行执行语句,执行完后,因为finally里面没有return语句,所以,当执行完finally语句之后,会再次回到return语句,执行就“return 4”,这时候方法就终结了,该方法最后面的那个return x语句不会再被执行了,并且因为finally里面的x++是对变量x的操作,此时x的值确实是5,但是catch里面的return路径在执行finally里面的x++的时候已经形成了,“return 4“是返回路径,而不是return x。
所以最终的结果就是 输出数字 4。