首先,一个try语句必须至少有一个catch或finally,finally是可有可无的,一个try可以带有多个catch。
通常我们说,不管是否有异常被捕获,finally子句中的代码都会被执行。
看下面代码:
public static int f(int n){
try {
int r = n*n;
return r ;
}
finally{
if (n == 2) return 0;
}
}
在方法返回前,finally子句的内容会被执行,如果finally子句也有一个return语句,这个返回值将覆盖try中返回的值。
一直都是这样认为的:finally子句中的代码永远会执行。
近期面试遇到了问题,如下。
public static void main(String[] args) {
try {
System.out.println(11);
System.exit(0);
}finally{
System.out.println(22);
}
}
结果:11.
显然,finally子句的语句没有执行。因为在try子句中,程序已经退出。