JAVA小知识点-Finally和Return的执行关系
如果Try和Catch中存在return语句的时候Finally内的语句是否会执行,执行的时候对结果又有什么影响呢?我写了个例子来试验这个问题:
public static Map<String, String> getMapTry() {
Map<String, String> map = new HashMap<String, String>();
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<String, String> getMapCatch() {
Map<String, String> 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<String, String> 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
结果分析:
引用类型发生了变化,基本数据类型没有修改。
从执行结果得出以下结论:
- finally 即使在try或者catch中存在 return 且执行的情况下也会执行。
- finally 对变量的修改发生在方法调用结束之前。
- return 语句是在 finally 之前执行的。
- return 的返回结果并不是返回原数据而是对原有数据的拷贝,基本数据类型拷贝基本类型值,引用类型拷贝引用而不拷贝引用内的值。
- finally 内语句能够影响引用类型但不会影响基本数据类型。
JAVA小知识点-Finally和Return的执行关系的更多相关文章
- java小知识点汇总
1.ConcurrentHashMap使用segment来分段和管理锁,segment继承自ReentrantLock,因此ConcurrentHashMap使用ReentrantLock来保证线程安 ...
- java小知识点简单回顾
1.java的数据类型分为两种:简单类型和引用类型(数组.类以及接口).注意,java没有指针的说法,只有引用.简单类型的变量被声明时,存储空间也同时被分配:而引用类型声明变量(对象)时,仅仅为其分配 ...
- java 小知识点
1.转Java中Vector和ArrayList的区别 首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList.Vector和LinkedList.List用于存 ...
- 转:Java中finally和return的执行关系
finally可以分两方面理解 1.执行时机问题.finally总会执行(除非是System.exit()),正常情况下在try后执行,抛异常时在catche后面执行 2.返回值问题.可以认为try( ...
- java中异常处理finally和return的执行顺序
根据个人亲自测试,得出如下结果: 1.try,catch中有没有return,finnally都会执行,而且是先执行try,catch后,最后执行finnally语句: 2.如果finnally中有r ...
- Java小知识点总结
目录 配置 数据库配置文件 基础知识 Switch i++和++i 快捷打代码 输入数据 代码折叠 super关键字 instanceof 防止类型强制转换带来的错误 继承 第一个Java程序 Jav ...
- java小知识点 2015/10/6
java中length,length(),size()区别: 1 java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度 2 java中的length()方法是针对字 ...
- Java小知识点总结01
1. 整数相乘或者相加,如果超过最大整数值,会变成负数 2. 字符串比较可以使用:s1.compareTo(s2) ,如果s1大于s2返回值大于1,等于返回值等于0,小于返回值小于1 3. char值 ...
- java小知识点
1 判断是否为win系统 int version=System.getProperty("os.name").toLowerCase().indexOf("windows ...
随机推荐
- 深入理解C指针之六:指针和结构体
原文:深入理解C指针之六:指针和结构体 C的结构体可以用来表示数据结构的元素,比如链表的节点,指针是把这些元素连接到一起的纽带. 结构体增强了数组等集合的实用性,每个结构体可以包含多个字段.如果不用结 ...
- c# md5
还可以加盐,更难以破解 public static string GetMD5(string sDataIn) { MD5Crypt ...
- ArcEngine下纵断面图的绘制
我是採用Dev控件中的画图控件来绘制的纵断面图,以下主要来介绍下输电线路选址以及纵断面图的实时绘制的实现流程. 一.关于输电线路的选址,首先要准备好基础地理数据,包含选线区的DOM,DEM,DLG以及 ...
- CGI编程学习----查询2000W开房数据
原文:CGI编程学习----查询2000W开房数据 0x01:什么是CGI编程? CGI:Common Gateway Interface CGI代表Common Gateway Interface( ...
- 数据结构--画画--最小生成树(Prim算法)
通信网络的最小生成树配置,它是使右侧的生成树值并最小化.经常使用Prim和Kruskal算法.看Prim算法:以防万一N={V,{E}}它是在通信网络,TE它是N设置边的最小生成树.从算法U={u0} ...
- Angular指令(一)
Angular开发者手册重点翻译之指令(一) 创建自定义的指令 这个文章将解释什么需要在自己的angularjs应用中创建自己的指令,以及如何实现它. 什么是指令 在高的层面上讲,指令是DOM元素中的 ...
- Hadoop -YARN 应用程序设计概述
一概述 应用程序是用户编写的处理数据的统称,它从YARN中申请资源完毕自己的计算任务.YARN自身相应用程序类型没有不论什么限制,它能够是处理短类型任务的MapReduce作业,也能够是 ...
- 让png在ie下正常显示 用到了jquery插件DD_belatedPNG 但是在ie6中这句话 前面添加有效 后面移除无效 IE6 jq removeClass无效
jQuery(this).addClass("background").siblings().removeClass("background") 导致IE6移除 ...
- 使用vs2010复制粘贴代码时特别卡用一段时间就特别卡重启也没用
vs2010编写代码一段时间后复制粘贴特别卡,下拉条也特别卡,这个状况困扰了我两个月,实在忍不住了,去网上搜了搜 有网友说是快捷键冲突,所以我就把其他程序结束了,结果莫名奇妙的瞬间就不卡了.最终弄明白 ...
- WCF总结笔记
------------------------windowform承载服务步骤: (1)定义契约: using System; using System.Collections.Generic; u ...