JAVA初窥:try、catch、finally语句块中的return语句
来源:互联网 发布:怎么样提高淘宝流量 编辑:程序博客网 时间:2024/05/22 14:02
参考文章:http://blog.sina.com.cn/s/blog_6aefe42501018wmw.html
http://blog.csdn.net/ns_code/article/details/17485221
对于做Java开发的程序员来说,异常捕获似乎已经是再稀松平常不过的事情了。我们都已经清楚的了解到:在try-catch-finally语法结构中无论异常是否发生,finally语句块中的内容都会被执行,所以,我们习惯把一些占用资源较多的对象的释放操作放到finally语句块中来做,例如:关闭数据库连接、关闭文件流。
但当try-catch-finally语句块中包含return语句时,情况就会变得复杂,有以下几种情况值得注意。
情况一:try中有return,catch和finally中没有return
public class Test{ public static void main(String[] args) { System.out.println("返回结果 num = " + test()); } private static int test() { int num = 10; try { System.out.println("进入try语句块"); System.out.println("try语句块中num = " + num); return num; } catch (Exception e) { System.out.println("进入catch语句块"); } finally { num += 10; System.out.println("进入finally语句块"); System.out.println("finally语句块中num = " + num); } return num; }}执行结果:进入try语句块try语句块中num = 10进入finally语句块finally语句块中num = 20返回结果 num = 10结果分析:
程序先进入try语句块,在执行return num;语句之前,发现程序后面还有finally语句块,于是,先将要返回的值num=10缓存起来,然后程序跳转到finally语句块执行,在finally语句块中num值被修改为了20,而最终返回的结果却是10,这说明finally语句块执行完毕后,程序直接将之前try语句块缓存的值返回了。
情况二:try和finally中都有return
public class Test{ public static void main(String[] args) { System.out.println("返回结果 num = " + test()); } private static int test() { int num = 10; try { System.out.println("进入try语句块"); System.out.println("try语句块中num = " + num); return num; } catch (Exception e) { System.out.println("进入catch语句块"); } finally { num += 10; System.out.println("进入finally语句块"); System.out.println("finally语句块中num = " + num); return num; } }}执行结果:进入try语句块try语句块中num = 10进入finally语句块finally语句块中num = 20返回结果 num = 20结果分析:
try语句块的执行过程与情景一相同,所不同的是finally语句块中的return num;直接将finally语句块中的num值返回了。
注:SUN官方并不推荐在finally语句块中写return语句,否则,会提示警告:finally block does not complete normally。
情况三:将情景一中的返回值类型改为引用类型
public class Test{ public static void main(String[] args) { System.out.println("返回结果Num.num = " + test().num); } private static Num test() { Num num = new Num(); try { System.out.println("进入try语句块"); System.out.println("try语句块中Num.num = " + num.num); return num; } catch (Exception e) { System.out.println("进入catch语句块"); } finally { num.num += 10; System.out.println("进入finally语句块"); System.out.println("finally语句块中Num.num = " + num.num); } return num; }}class Num{ public int num = 10;}执行结果:进入try语句块try语句块中Num.num = 10进入finally语句块finally语句块中Num.num = 20返回结果Num.num = 20结果分析:
try语句块的执行过程与情景一类似,只是此时缓存的是一个Num引用类型对象,finally语句块中的num.num += 10;修改了Num对象的num值,并作为最终的结果返回。
结论
当try-catch-finally语句块中包含return语句时,有以下几点结论:
- 如果finally中有return语句,finally中的return语句会”覆盖“掉try中的return语句,直接将finally中的值作为结果返回。
- 如果finally中没有return语句,也没有改变要返回的结果值,则执行完finally中的语句后,会接着执行try中的return语句,返回try之前保留的结果值。
- 如果finally中没有return语句,但是改变了要返回的结果值,这里有点类似与引用传递和值传递的区别,分以下两种情况:
1)如果返回值是基本数据类型或字符串,try中的return语句依然会返回进入finally块之前保留的结果值。2)如果返回值是引用数据类型,try中的return语句返回的就是在finally中改变后的该对象的值。
阅读全文
0 0
- JAVA初窥:try、catch、finally语句块中的return语句
- 关于java中的try-catch-finally语句和return
- 关于java中的try-catch-finally语句和return
- 关于java中的try-catch-finally语句和return
- 关于java中的try-catch-finally语句和return
- 关于java中的try-catch-finally语句和return
- 关于java中的try-catch-finally语句和return
- return语句在Java的Try Catch Finally中的行为
- 关于java中的try-catch-finally语句和return
- 关于java中的try-catch-finally语句和return
- 关于java中的try-catch-finally语句和return
- try-catch-finally块中的退出语句
- try{}catch(){}finally语句块
- try...catch...finally语句块
- try...catch...finally语句块
- try、catch、finally语句块中含有return
- try..catch..finally块中的跳转语句(return,break,continue)使用注意事项
- return语句在try-catch-finally中的执行顺序
- 技术文章 | 用Python写一个NoSQL数据库
- 前端跨域知识总结
- csdn如何转载别人的文章
- PHP学习笔记--字符串操作 作者:yezi33 字符串的整理: trim():除去字符串开头和末尾的空格或其他字符。函数执行成功时返回删除了string字符串首部和尾部空格的字符串,发生错误时返回空
- centerloss系列文章笔记——人脸检测Face R-CNN
- JAVA初窥:try、catch、finally语句块中的return语句
- 播放器JPlayer的使用及遇到的问题
- 命令
- java面经整理(5)
- 浏览器如何渲染页面
- Java数据库连接——JDBC基础知识(JDBC使用详解)
- 地图圈定任意区域,自动形成闭合图形Demo
- 快速入门shell脚本编写(一)
- Git与Github的使用