星空网 > 软件开发 > Java

finally和return 执行顺序

先贴代码:

package net.chinaedu.projects.venus;

import java.util.HashMap;
import java.util.Map;

public class FinallyTest {
public static void main(String[] args) {
StringTest str = new StringTest();
System.out.println("str===" + str.getValue());

ObjectTest obj=new ObjectTest();
System.out.println("obj===" + obj.getMap());
}

}

class StringTest {
public String getValue() {
String j = "string_orgin";
try {
j="string_try";
return j;
} finally {
j = "string_finally";
}
}
}

class ObjectTest {

public Map<String, String> getMap() {
Map<String, String> argMap = new HashMap<String, String>();
try {
argMap.put("tryKey", "2");
return argMap;
} finally {
argMap.put("finalKey", "2");
}
}
}

输出:

str===string_try
obj==={tryKey=2, finalKey=2}

 

总结:在return返回之前  会将return的值拷贝一份,然后在执行finally,如果拷贝的变量类型是基本类型 那么finally不能改变其原来的值 但是如果是对象 那么因为拷贝的一个对象引用  finally会改变原来在堆中的对象,所以会影响return 值

PS:顺序一定是执行try块,在执行finally 但是因为return返回机制的原因 导致因为返回类型导致的数据不同




原标题:finally和return 执行顺序

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流