一、finally中的语句一定执行吗?
finally语句一般来说是一定会执行的,但是也有特殊情况,当遇到一下两种情况,finally中的语句就不会执行。
- 在try语句之前就返回,没有执行try-catch-finally语句,这种情况自然不会执行finally中的语句。
- 在try语句中有Sysem.exit(0);,此语句的作用是关闭java虚拟机JVM.
二、return与finally语句的执行顺序
- try中的return语句在finally之前执行,在finally之后返回值。
public class Demo01 {
public static void main(String[] args) {
System.out.println(test()) ;
}
public static String test() {
int num = 10 ;
try {
System.out.println("running try") ;
return test2() ;
} catch (Exception e) {
System.out.println("running catch") ;
} finally {
System.out.println("running finally") ;
}
return "end" ;
}
private static String test2() {
System.out.println("running test2()") ;
return "return test2()" ;
}
}
运行结果:
2.finally中的return语句会覆盖try中的return语句返回。
public class Demo01 {
public static void main(String[] args) {
System.out.println(test()) ;
}
public static int test() {
int num = 10 ;
try {
num += 50 ;
return num ;
} catch (Exception e) {
System.out.println("running catch") ;
} finally {
System.out.println("running finally") ;
return 100 ;
}
}
}
运行结果: