有return的情况下try catch finally的执行顺序
来源:互联网 发布:js动态获取input的值 编辑:程序博客网 时间:2024/05/22 04:48
总结一下:
1、不管有木有出现异常,finally块中代码都会执行;
2、当try和catch中有return时,finally仍然会执行,执行完之后才会执行return;
3、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。
程序执行try块中return之前(包括return语句中的表达式运算)代码;
有异常:执行catch块中return之前(包括return语句中的表达式运算)代码;
则再执行finally块,因为finally块中有return所以提前退出。
无异常:则再执行finally块,因为finally块中有return所以提前退出。
finally中有return会吃掉异常的
需要注意的是:
在try语句中,在执行return语句时,要返回的结果已经准备好了,就在此时,程序转到finally执行了。
在转去之前,try中先把要返回的结果存放到不同于x的局部变量中去,执行完finally之后,在从中取出返回结果,
因此,即使finally中对变量x进行了改变,但是不会影响返回结果。
但是,如果 需要返回的值不是基本类型,是引用类型的话,还是会改变的。
结论:
1.影响返回结果的前提是在 非 finally 语句块中有 return 且非基本类型
2.不影响返回结果 的前提是 非 finally 块中有return 且为基本类型
究其本质 基本类型在栈中存储,返回的是真实的值,而引用类型返回的是其浅拷贝堆地址.所以才会改变~,但是,经测试date类型的数据也是不受影响的,因为date类实现了serializable序列化接口,利用对象序列化可以进行对象的”深复制”,即复制对象本身及引用的对象本身。所以和基本类型类似,try中副本的地址和之后在finally中修改的值得地址不同,所以不会改变。
- 有Return情况下的try catch finally执行顺序
- try-catch-finally的执行顺序(有return的情况)
- 各种return情况下try,catch,finally的执行顺序
- 有return的情况下try catch finally的执行顺序的全面总结
- 有return的情况下try catch finally的执行顺序
- 有return的情况下try catch finally的执行顺序
- 有return的情况下try catch finally的执行顺序
- 有return的情况下try catch finally的执行顺序
- 有return的情况下try catch finally的执行顺序
- 有return的情况下try catch finally的执行顺序
- 有return的情况下try catch finally的执行顺序
- 有return的情况下try catch finally的执行顺序
- 有return的情况下try catch finally的执行顺序
- 有return的情况下try catch finally的执行顺序
- 有return的情况下try catch finally的执行顺序
- 在有return的情况下try catch finally的执行顺序
- 有return的情况下try catch finally的执行顺序
- 有return的情况下try catch finally的执行顺序
- postgresql根据表创建对应的分区表
- 纯css 实现下拉菜单
- 去哪儿网前端架构师司徒正美:如何挑选适合的前端框架?
- Android GridView实战:仿微信、支付宝钱包宫格界面
- 走在Java道路上的心得体会:2015.10——至今(持续更新)
- 有return的情况下try catch finally的执行顺序
- 获取一个字符串在另一个字符串中出现的次数
- IP Header
- 明锐 卡罗拉
- TCP Header
- Quartz2D技术基本的操作
- TCP-establishment and termination
- java提高篇(三十)-----Iterator
- iOS_导入libxml2.2框架后,找不到<libxml/tree.h>的解决办法