Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?
不一定,(1)需要执行到try语句中(2)try中如果有System.exit(0)也不会执行,因为System.exit(0)是终止java虚拟机jvm的,如果虚拟机都停止了,后面的肯定都不会继续执行
try...catch...finally中分别执行顺序呢?
public int test() {
int a = 10;
try {
System.out.println("try......");
return a += 10;
} catch (Exception e) {
System.out.println("catch......");
} finally {
System.out.println("finally......");
if (a > 10) {
System.out.println("finally......a = " + a);
}
}
return 20;
}
try......
finally......
finally......a = 20
可以看出,先执行try中,return中的语句执行完后再去执行finally语句,finally中执行完后再返回try中的结果。
如果finally中也有return呢,最终会停在哪个里面的return?
@Test
public void addition_isCorrect() {
System.out.println(test());
}
public int test() {
int a = 10;
try {
System.out.println("try......");
return a += 10;
} catch (Exception e) {
System.out.println("catch......");
} finally {
System.out.println("finally......");
if (a > 10) {
System.out.println("finally......a = " + a);
}
return a += 20;
}
}
try......
finally......
finally......a = 20
40
先执行try语句,包括try中return中部分,但是不返回,继续执行finally语句,最终停留在finally中的return
如果finally中没有return,但是我更改了数据,最终返回的结果会是什么呢?
@Test
public void addition_isCorrect() {
System.out.println(test());
}
public int test() {
int a = 10;
try {
System.out.println("try......");
return a += 10;
} catch (Exception e) {
System.out.println("catch......");
} finally {
System.out.println("finally......");
if (a > 10) {
System.out.println("finally......a = " + a);
}
a = 30;
}
return a += 20;
}
打印------------------------
try......
finally......
finally......a = 20
20