先看引用类型的代码:

import java.util.HashMap;
import java.util.Map;public class trycatchefinally {public static void main(String[] args) {System.out.println(getMap().get("KEY"));}public static Map<String, String> getMap() {Map<String, String> map = new HashMap<>();map.put("KEY", "INIT");try {map.put("KEY", "TRY");System.out.println("111>>> ");return map;} catch (Exception e) {map.put("KEY", "CATCH");} finally {System.out.println("222>>> ");map.put("KEY", "FINALLY");map = null;System.out.println("333>>> ");}System.out.println("444>>> ");return map;}
}

finally里修改map为null

下面是字节码:

 0 new #8 <java/util/HashMap>3 dup4 invokespecial #9 <java/util/HashMap.<init>>7 astore_08 aload_09 ldc #4 <KEY>
11 ldc #10 <INIT>
13 invokeinterface #11 <java/util/Map.put> count 3
18 pop
19 aload_0
20 ldc #4 <KEY>
22 ldc #12 <TRY>
24 invokeinterface #11 <java/util/Map.put> count 3
29 pop
30 aload_0
31 astore_1
32 aload_0
33 ldc #4 <KEY>
35 ldc #13 <FINALLY>
37 invokeinterface #11 <java/util/Map.put> count 3
42 pop
43 aconst_null
44 astore_0
45 aload_1
46 areturn
47 astore_1
48 aload_0
49 ldc #4 <KEY>
51 ldc #15 <CATCH>
53 invokeinterface #11 <java/util/Map.put> count 3
58 pop
59 aload_0
60 ldc #4 <KEY>
62 ldc #13 <FINALLY>
64 invokeinterface #11 <java/util/Map.put> count 3
69 pop
70 aconst_null
71 astore_0
72 goto 91 (+19)
75 astore_2
76 aload_0
77 ldc #4 <KEY>
79 ldc #13 <FINALLY>
81 invokeinterface #11 <java/util/Map.put> count 3
86 pop
87 aconst_null
88 astore_0
89 aload_2
90 athrow
91 aload_0
92 areturn

下面是注释了try里的return比较生成的不同的字节码:

参考:https://stackoverflow.com/questions/4625650/object-reference-set-to-null-in-finally-block

再看看值类型:

总结如下:

try{ return } finally{…} return

finally修改基本类型,则不影响返回值

finally修改非基本类型,影响返回值

一个冷僻的知识点try直接返回finally里的设置null其实无效相关推荐

  1. 那些程序跑动中冷僻的知识点(上)

    作为像老猫一样的土著程序员,只懂随时发车却不懂如何修车,放弃了基础理论容易翻车,刚巧最近看了半天关于程序运行的书籍,咱分两期聊一聊<那些程序跑动中冷僻的知识点>. 定场诗:广知世事休开口, ...

  2. ajax登陆返回值判断,一个简单的ajax用户登陆返回值问题?有代码

    一个简单的ajax用户登陆返回值问题?有代码 來源:互聯網  2009-11-13 11:55:56  評論 分類: 電腦/網絡 >> 程序設計 >> 其他編程語言 問題描述: ...

  3. 链表面试题3:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成 的。

    链表面试题3:将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成 的. 首先我们的思想是将得一个链表和第二个链表的每个结点进行比较,谁小谁就插入到新链表的最后. ...

  4. 定义一个类:实现功能可以返回随机的10个数字,随机的10个字母, 随机的10个字母和数字的组合;字母和数字的范围可以指定,类似(1~100)(A~z)...

    #习题2:定义一个类:实现功能可以返回随机的10个数字,随机的10个字母, #随机的10个字母和数字的组合:字母和数字的范围可以指定class RandomString():#随机数选择的范围作为参数 ...

  5. 如何引用传递参数从一个函数中得到多个返回值

    2019独角兽企业重金招聘Python工程师标准>>> 通过"引用"传递参数的方法从一个函数中得到多个返回值.就像三元运算符一样,大部分受过正式编程训练的程序员都 ...

  6. 2021-11-12:前 K 个高频元素。给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。提示:1 <= nums.length <=

    2021-11-12:前 K 个高频元素.给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素.你可以按 任意顺序 返回答案.提示:1 <= nums.length ...

  7. 编写一个静态方法lg(),接收一个整型参数N,返回不大于log2N(以2为底)的最大整数。不要使用Math库。

    题目: 编写一个静态方法lg(),接收一个整型参数N,返回不大于log2N的最大整数.不要使用Math库. 代码: public class Node {public static void main ...

  8. 微机原理:编写一个源程序,在键盘上按一个键,将从AL返回的ASCII码值显示出来,如果按下ESC键则程序退出。

    微机原理:编写一个源程序,在键盘上按一个键,将从AL返回的ASCII码值显示出来,如果按下ESC键则程序退出. DATAS SEGMENT msg db 'Input ',0dh,0ah,'$' te ...

  9. 函数中有多个return?C语言中,一个函数可以有几个返回值?

    在移植wifi的代码时,遇到了一些与下面类似的函数,这些函数中有不只一个return,这可是个新鲜的玩意儿: int func (int b) {int a=5;if (a>b)return a ...

最新文章

  1. openstack高可用方案
  2. 巴菲特:买进你同学的10%
  3. Microtransactions
  4. matlab如何excel数据,Matlab如何读取Excel里的数据
  5. android webview网页显示不完整,【报Bug】webview页面内容显示不全
  6. 操作失败10秒内未完成启动服务mysql_01-MySQL 命令行-cmd用法-未完成
  7. 课程目标 线程 java 1615387415
  8. ogre的主要渲染流程(转)
  9. python调用按键精灵插件_按键精灵 插件命令 重中之重务必要记住怎么操作
  10. 如何用甘特图进行项目进度管理
  11. 《学会提问》-批判性思维
  12. 重读“发展Linux,中日两国之比较”有感
  13. 自己动手搭建聊天APP
  14. bytebuddy实现原理分析 源码分析 (三)- advice 详解
  15. 计算机台式和电脑的区别吗,直观:工业计算机和家用台式计算机有什么区别
  16. 要成就事业,更要分享快乐 记上海润邦(集团)有限公司董事长兼总经理李东
  17. 磨刀不误砍柴 - 配置适合工作学习的桌面环境
  18. Microsoft公司 .CAB文件格式
  19. 图像形态学处理——灰度梯度(Matlab)
  20. JAVA有什么办法让定时停止,java通过接口开启和停止定时任务

热门文章

  1. cmake java_JNI系列之AS支持CMake了
  2. 超算学院计算机系吧,上海交通大学计算机科学与工程系(CSE)
  3. dockefile nginx php,dockerfile自动部署nginx+php7
  4. java 默认数据库创建路径_无法创建数据库路径文件:/ user / hive /仓库错误
  5. 微信按钮android代码实现原理,微信小程序button标签open-type实现原理
  6. CV算法复现(分类算法5/6):ResNet(2015年 微软亚洲研究院)
  7. 机器学习(4)特征预处理
  8. 【python】图像映射:单应性变换与图像扭曲
  9. CMRNet++:一种相机在激光雷达构建地图中的定位方案
  10. 如何从ATS获取客户端平均响应时间(单位,毫秒)?