浅析Java tyr、catch、finally
1.基本概念与结构
使用try、catch、finally来组成异常处理语句块
try关键字用来包围可能会出现异常的逻辑代码,它单独无法使用,必须配合catch或者finally使用。
catch用来捕获可能发生的异常,并进行相应的处理,catch可以有多个语句块,当有一个catch捕获到异常,后续的catch块都不会执行。当异常都没有被catch到,异常将会抛给上层调用者。
finally语句中主要是用来做一些clean操作,建议不要将关键代码放入此处,而且,最好不要在finally语句块中包含return,会导致流程提前返回,因为finally里的return覆盖已有的返回值,而不会返回try或catch中保存的返回值。
Java编译器允许的组合使用形式只有以下三种形式:
try{}catch(Exception e){},
try{}finally{},
try{}catch(Exception e){}finally{}
2.finally一定会执行吗?
常见的一种误解是认为,finally语句块中的代码一定会执行。
而事实并非如此。
当出现这三种情况时,finally语句块不会执行。
(1)流程在进入try语句前,就已经返回。例如:try语句之前return或者异常中断;
(2)虚拟机退出。例如:在try语句块中执行system.exit(0);当然,所有的代码都不会去执行。毕竟java代码的运行依赖于jvm;
(3)线程被中断。例如。在执行finally语言块前,线程休眠时,中断当前线程,也会导致finally语句无法执行;
3.try、catch、finally执行顺序
一般执行顺序是try—>catch—>finally。
当然如果没有发生异常,则catch块不会执行。而finally块在不发生上述3种情况下都是会执行的。
finally语句的执行顺序是在return语句前执行的。

浙公网安备 33010602011771号