在任何一本Java教材中,异常处理都是作为单独的章节讲解的,足可见其分量。
而真正的能够用好这个知识,只有经历实际项目的开发才会有点体会。
1、try catch finally的执行顺序
(1).一般情况下:try----catch----finally呢
(2).如果try中有return:try----finally----return
(3).如果catch中有return:try----catch ----finally----return
在后两种情况下,reurn会被暂存在栈里面,等到finally执行完再返回。
这种机制保证无论出现什么情况,在try catch过程中finally都被执行一次,特别适合用于释放资源,例如释放数据库链接、释放打开的文件流等
下面看这一段代码,结果t会是神马东东?
public static final String test() { String t = ""; try { t = "try"; return t; } catch (Exception e) { t = "catch"; return t; } finally { t = "finally"; //return t; } }
上面我们讲到finally之前,return会被暂存到栈里面。上面代码里的t就会暂存起来,等到实际return的时候重新启用,所以上面的代码的正确返回值是"try"。
但是如果我们在finlly字句中添加了return,那么前面try子句中的t值就会被淹没,此时实际的返回值会是"finally"
2、try catch finally结构使用的建议
不建议在finally块中添加return,因为会消化掉try catch中的异常信息,不利于错误的正常处理,合理的return语句的位置:
(1).return语句只在函数最后出现一次。
(2).return语句仅在try和catch里面都出现。
(3).return语句仅在try和函数的最后都出现。
(4).return语句仅在catch和函数的最后都出现。
参考: http://www.cnblogs.com/aigongsi/archive/2012/04/19/2457735.html