你的位置:首页 > Java教程

[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返回机制的原因 导致因为返回类型导致的数据不同