finally 常考的面试题(超详细!)

什么时候用到finally呢?

某些事物(除内存外)在异常处理完后需要恢复到原始状态,如:开启的文件,网络连接等。

try-catch-finally 中哪个部分可以省略?

答: catch和finally可以省略其中一个 , catch和finally不能同时省略
注意:格式上允许省略catch块, 但是发生异常时就不会捕获异常了,我们在开发中也不会这样去写代码。

问题:try-catch-finally 中,如果 catch 中有 return 了,finally 还会执行吗?

答:finally中的代码会执行

finally语句在try或catch中的return语句执行之后,还是return返回之前执行呢?(最后面总结有答案)

详解:执行流程:

  • 1.先计算返回值, 并将返回值存储起来, 等待返回;
  • 2.执行finally代码块;
  • 3.将之前储存的返回值,返回出去。

需注意:

  • 1.返回值是在finally之前就确定了,并且缓存了,不管finally对该值(非引用数据类型)做任何的改变,返回的值都不会改变
  • 2.finally代码中不建议包含return,因为程序会在上述的流程中提前退出,也就是说返回的值不是try或catch的值。
  • 3.如果在try或catch中停止了JVM,则finally不会执行.例如停电…, 或通过如下代码退出 JVM:System.exit(0);
finally举例1:(即使return,在准备返回值与跳出函数之间,仍会执行finally中的语句)
image.png

image.png
finally举例2:(引用数据类型和非引用数据类型的区别)

代码:(引用数据类型)

image.png

运行结果:
image.png

从结果可看出:由于 返回值是引用数据类型,在return之前准备好p(将引用地址进行备份),但是finally中通过引用数据类型的地址,修改了具体的值,所以还是显示的最终结果会更改属性值为28;

内存分析:

image.png

代码:(非引用数据类型)及运行结果:

image.png

内存分析:

image.png

为什么会产生上面这种原因,就是下面要说的关于非引用数据类型(基本数据类型)和引用数据类型的区别:
  • 基本数据类型存在于栈里,那么 return备份的就是数据 。而finally改变的是栈里的数据,但是不会改变备份数据,所以返回值不变。
  • 引用数据类型,数据存在于堆中开辟的空间里,而栈中存储的是堆所对应的空间地址,因此** return备份的是栈中的空间地址 **,但是finally改变的是堆中的数据,所以当return返回地址时,查找到堆中的数据就是被改变了。

总结:

1.finally代码块是在try代码块中的return语句执行之后,返回之前执行的。

2.finally代码块中的return语句覆盖try代码块中的return语句。

3.如果finally语句中没有return语句覆盖返回值,那么原来的返回值可能因为finally里的修改而改变也可能不变。传值类型的返回值:不变;传址类型的返回值:会变。
这里引入来一个新的问题,怎么判断一个变量是传值还是传址?传值:8种基本数据类型及其包装类,字符常量。传址:数组和对象。

4.try代码块中的return语句在异常的情况下不会被执行,这样具体返回哪个看情况;catch中的return执行情况与未发生异常时try中return的执行情况完全一样。


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容