参考:https://www.cnblogs.com/lanxuezaipiao/p/3440471.html
https://blog.csdn.net/xx326664162/article/details/50266995
结论:
1.finally是在return返回之前执行的,也就是说finally必执行(当然是建立在try执行的基础上)
2.finally修改的基本类型是不影响返回结果的。(传值的)
3.修改list ,map,自定义类等引用类型时,是影响返回结果的。(传址的)对象也是传址的
4.其中例如return b+=10 这条语句先执行,也就是说b的值已经成了b+10了然后再去执行finally
引用示例
import java.util.*;
public class FinallyTest4 {
public static void main(String[] args) {
System.out.println(getMap().get("KEY").toString());
}
public static Map<String, String> getMap() {
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");
}
finally {
map.put("KEY", "FINALLY");
}
}
}
运行结果是Finally
2.变量示例
import java.util.*;
public class FinallyTest4 {
public static void main(String[] args) {
System.out.println(test3());
}
public static int test3() {
int b = 20;
try {
System.out.println("try block");
return b += 80;
} catch (Exception e) {
System.out.println("catch block");
} finally {
System.out.println("finally block");
if (b > 25) {
System.out.println("b>25, b = " + b);
}
b = 150;
}
return 2000;
}
}
运行结果
try block
finally block
b>25, b = 100
100