博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA小知识点-Finally和Return的执行关系
阅读量:5301 次
发布时间:2019-06-14

本文共 2303 字,大约阅读时间需要 7 分钟。

如果Try和Catch中存在return语句的时候Finally内的语句是否会执行,执行的时候对结果又有什么影响呢?我写了个例子来试验这个问题:

public static Map
getMapTry() { Map
map = new HashMap
(); map.put("KEY", "INIT"); try { map.put("KEY", "TRY"); return map; } catch (Exception e) { map.put("KEY", "CATCH"); e.printStackTrace(); } finally { map.put("KEY", "FINALLY"); } System.out.println("---------end--------"); return map; } public static Map
getMapCatch() { Map
map = null; try { map.put("KEY", "TRY"); } catch (Exception e) { map = new HashMap<>(); map.put("KEY", "CATCH"); e.printStackTrace(); return map; } finally { map.put("KEY", "FINALLY"); } System.out.println("---------end--------"); return map;} public static int getInt() { Map
map = null; int ret =0; try { map.put("KEY", "TRY"); ret = 1; } catch (Exception e) { map = new HashMap<>(); map.put("KEY", "CATCH"); e.printStackTrace(); return ret; } finally { map.put("KEY", "FINALLY"); ret =3; } System.out.println("---------end--------"); return ret; } public static void main(String[] args) { System.out.println("try:" + getMapTry().get("KEY").toString()); System.out.println("catch:" + getMapCatch().get("KEY").toString()); System.out.println("int:" + getInt()); }

 

执行结果:

try:FINALLY

java.lang.NullPointerException
  at com.wmshua.test.FinallyReturnRelation.getMapCatch(FinallyReturnRelation.java:43)
  at com.wmshua.test.FinallyReturnRelation.main(FinallyReturnRelation.java:14)
catch:FINALLY
java.lang.NullPointerException
  at com.wmshua.test.FinallyReturnRelation.getInt(FinallyReturnRelation.java:63)
  at com.wmshua.test.FinallyReturnRelation.main(FinallyReturnRelation.java:15)
int:0

结果分析:

引用类型发生了变化,基本数据类型没有修改。

 

从执行结果得出以下结论:

  1. finally 即使在try或者catch中存在 return 且执行的情况下也会执行。
  2. finally 对变量的修改发生在方法调用结束之前。
  3. return 语句是在 finally 之前执行的。
  4. return 的返回结果并不是返回原数据而是对原有数据的拷贝,基本数据类型拷贝基本类型值,引用类型拷贝引用而不拷贝引用内的值。
  5. finally 内语句能够影响引用类型但不会影响基本数据类型。

 

转载于:https://www.cnblogs.com/inbase/p/4560616.html

你可能感兴趣的文章
火狐 SSL 收到了一个弱临时 Diffie-Hellman 密钥的解决办法
查看>>
verilog 运算符与优先级
查看>>
大神教你Nginx常用基础配置方案
查看>>
POJ 3207 【2-sat】.cpp
查看>>
生成缩略图
查看>>
Web设计禁忌(一)
查看>>
安装好MySQL后就开始学习如何后台创建自己的数据库吧!
查看>>
python jvm数据
查看>>
kvm虚拟机安装
查看>>
【剑指offer】24、反转链表
查看>>
POJ1459 Power Network (网络流)
查看>>
HTML DOM部分---document对象;
查看>>
【上传图片】上传图片二三事
查看>>
新概念英语第一册单词
查看>>
初识python——知其名而去其意
查看>>
PAT 1082 射击比赛
查看>>
ionic 图片轮播ion-slide-box问题
查看>>
深入出不来nodejs源码-内置模块引入再探
查看>>
递归算法 笔记
查看>>
MotioninJoy win10下装载失败
查看>>