下面是我关于一个简单的finally块的示例。
public class Ex2 {
public static void main(String args[]) throws ArithmeticException {
System.out.println(Ex2.myTestingFuncn());
}
public static int myTestingFuncn() {
try {
// first execution
return 5;
} finally {
// second execution
System.out.println("finally");
}
}
}
此结果是
finally
5
符合预期。
但是,当这种情况最终发生时,块将覆盖try块的值。
try {
// first execution
return 5;
} finally {
// second execution
return 12;
}
结果:12
这是怎么发生的?我的意思是这些块执行的顺序是什么?
请帮忙。
谢谢
答案 0 :(得分:1)
在第一个示例中,您使用System.out.println
2次。第一次调用函数时,第二次在函数内部。
因此,他将首先“最终”打印,因为这是函数中执行的最后一个块。最后打印5的原因是因为这是您调用的函数的输出。 (执行完函数后,输出为5)因为“最终”打印在函数内部,显然它将首先显示(因为它在运行时打印),然后,将打印出函数的实际输出。请勿在函数内使用System.out.println
,这可能会使您感到困惑:)
System.out.println
意味着仅在到达代码所在的地方将其打印出来。 (=在运行时)
在第二个示例中,返回值本身被覆盖。在第一个示例中,您只有一个返回值和一个System.out.println
语句,它们彼此没有影响。
希望这会有所帮助。