为什么80%的码农都做不了架构师?>>>
问题:
1.什么时候使用finally语句块???
2.finally语句块在try或者catch语句中return返回之前还是之后执行???
3.什么情况下finally语句块不执行???
解答:
1.也就是finally的作用。finally是为异常处理事件提供的一种清理机制。一般使用场景,某些事物(除内存外)在异常处理之后需要恢复到原始状态,如关闭文件,释放系统资源等。
2.1 finally语句块在是在try或者catch块中的return语句执行之后,返回之前执行。例如:
private static int test1() {
int i = 1;
try {
System.out.println("try...");
return i += 10;
} catch (Exception e) {
System.out.println("catch...");
} finally {
i++;
System.out.println("finally...");
System.out.println("i=" + i);
}
return i;
}
执行结果
try...
finally...
i=12
test1:11
2.2 如果,finally块中也有return,则会覆盖try或者catch块中的return语句
2.3 finally块中的修改语句可能影响也可能不影响try或者catch中return已经确定的返回值,如果返回值类型是传址类型,则影响;传值类型,则不影响;
传值:8种基本数据类型及其包装类、字符常量
传址:数组或者对象。
例如:
private static Map<String, String> test() {
Map<String, String> map = new HashMap<String, String>();
map.put("KEY", "INIT");
try {
System.out.println("try...");
map.put("KEY", "TRY");
return map;
} catch (Exception e) {
System.out.println("catch...");
map.put("KEY", "CATCH");
} finally {
System.out.println("finally...");
map.put("KEY", "FINALLY");
map = null;
}
return map;
}
结果:
try...
finally...
{KEY=FINALLY}
3.除非在try块或者catch块中调用了退出虚拟机的方法(即System.exit(1);),否则不管在try块、catch块中执行怎样的代码,出现怎样的情况,异常处理的finally块总是会被执行的。