=Start=
缘由:
Java的基本功还是不扎实,其实是一个很基本的问题,但还是体现出之前学习的时候缺少疑问和实践。
正文:
参考解答:
- 不管有没有异常,finally中的代码都会执行;
- 当try、catch中有return时,finally中的代码依然会继续执行;
- finally是在return后面的表达式运算之后执行的,此时并没有返回运算之后的值,而是把值保存起来,不管finally对该值做任何的改变,返回的值都不会改变,依然返回保存起来的值。也就是说方法的返回值是在finally运算之前就确定了的;
- finally代码中最好不要包含return,程序会提前退出,也就是说返回的值不是try或catch中的值。
package com.ixyzero.learn; public class doTest { public static void try_catch_finall_test() { int i = 1; System.out.println("init: i=" + i); try { i += 1; System.out.println("try:\ti=" + i); return; } catch (Exception e) { i += 1; System.out.println("catch:\ti=" + i); return; } finally { i += 1; System.out.println("finally:\ti=" + i); return; } } public static void main(String[] args) { try_catch_finall_test(); } } /* init: i=1 try: i=2 finally: i=3 */
参考链接:
- java中关于try、catch、finally的总结
- try catch finally 用法
- try catch finally 执行顺序面试题总结
- try、catch、finally中return的执行顺序
=END=
《 “Java中关于try/catch/finally的小结” 》 有 2 条评论
Spring MVC/Boot 统一异常处理最佳实践
http://www.zhaojun.im/springboot-exception/
`
1. 前言
2. 异常处理反例
2.1. 捕获异常后只输出到控制台
2.2. 混乱的返回方式
3. 异常处理规范
3.1. 不要捕获任何异常
3.2. 统一返回结果集
3.3. 前端统一处理:
3.4. 后端统一处理异常
4. 总结
`
Java中如何确保数据库连接被关闭?
https://stackoverflow.com/questions/2225221/closing-database-connections-in-java
`
finally {
try { rs.close(); } catch (Exception e) { /* ignored */ }
try { ps.close(); } catch (Exception e) { /* ignored */ }
try { conn.close(); } catch (Exception e) { /* ignored */ }
}
// 或
finally {
DbUtils.closeQuietly(rs);
DbUtils.closeQuietly(ps);
DbUtils.closeQuietly(conn);
}
`