浅析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语句前执行的。

posted @ 2017-06-25 17:56  王将  阅读(228)  评论(0)    收藏  举报