从jdk 编译 的class 解读try catch finally 的奥义

总结:1 finally 里面 如果try 前面没有 System.exit(0),有return 就是最后结果,否者finally 类似于个钩子 吧,就是所有语句 return 之前 确定好值了(看编译器class 就知道了) 在会 去 执行finally 里面的语句,这里面有 return 肯定这个方法 就结束了
catch 出异常的流程 和 try 于finally 里面 一样的逻辑
例子1:值 没有影响 return 之前就确定 好了


看看 jdk 编译后的 class,看到没 有变量 替换了 a 变量

例子2 引用 受影响 return 之前就确定了,但是里面地址的值 还是影响了,map 却不为空 ,因为 return 之前 已经确定 好了


jdk 编译后的 class ,也是用 变量 替换了

elk
浙公网安备 33010602011771号