请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

java知识分享-我的java记事本

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1226|回复: 0

try catch finally,try里有return,finally还执行么?

[复制链接]

131

主题

132

帖子

573

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
573
发表于 2017-5-29 21:20:36 | 显示全部楼层 |阅读模式
(1)、不管有木有出现异常,finally块中代码都会执行;
(2)、当try和catch中有return时,finally仍然会执行;
(3)、try语句中,try要把返回的结果放置到不同的局部变量当中,执行finaly之后,从中取出返回结果,因此,即使finaly中对变量进行了改变,但是不会影响返回结果,因为使用栈保存返回值,即使在finaly当中进行数值操作,但是影响不到之前保存下来的具体的值,所以return影响不了基本类型的值,这里使用的栈保存返回值。而如果修改list,map,自定义类等引用类型时,在进入了finaly之前保存了引用的地址, 所以在finaly中引用地址指向的内容改变了,影响了返回值。
总结:
    1.影响返回结果的前提是在 非 finally 语句块中有 return 且非基本类型
    2.不影响返回结果 的前提是 非 finally 块中有return 且为基本类型
究其本质 基本类型在栈中存储,返回的是真实的值,而引用类型返回的是其浅拷贝堆地址.所以才会改变。
    return的若是对象,则先把对象的副本保存起来,也就是说保存的是指向对象的地址。若对原来的对象进行修改。对象的地址仍然不变,return的副本仍然是指向这个对象,所用finally中对对象的修改仍然有作用。而基本数据类型保存的是原原本本的数据,return保存副本后,在finally中修改都是修改原来的数据。副本中的数据还是不变,所以finally中修改对return无影响。
(4)、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。
�原有的数 据,iterator完成后再将头指针替换为新的数据,这样iterator线程可以使用原来老的数据,而写线程也可以并发的完成改变,更重要的,这保证了多个线程并发执行的连续性和扩展性,是性能提升的关键。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|java知识分享 ( 闽ICP备14003021号-4   

GMT+8, 2019-3-26 05:01 , Processed in 0.069739 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表
束丝机    单机除尘器    深圳seo    日照网站建设    海参    股票配资    抖音刷赞    梦幻西游私服    艺网卡盟    yy4480    粉丝福利购    声雨竹官方旗舰店    小可爱直播app下载    蓝冠注册    深圳自考网    创业者论坛    幸运赛车    新辉煌寿宁红石材厂