try中有return,finally依旧可以执行,且先执行finally语句再return
try {
return 1;
} finally {
System.out.println("finally");
}
catch中有return,finally依旧可以执行,且先执行finally语句再return
try {
//制造异常
int i = 0 / 0;
return 0;
} catch (Exception e) {
return 1;
} finally {
System.out.println("finally");
}
finally中如果有return,就会直接返回,会忽略try/catch中的return
try {
//制造异常
int i = 0 / 0;
return 0;
} catch (Exception e) {
return 1;
} finally {
System.out.println("finally");
return 2;
}
总结:
程序在try/catch中碰到return时,知道自己命不久矣,就会先跳到finally,然后就返回。
finally先执行再return,那么究竟finally会不会影响return的返回值呢?
//catch中的return结果同样
public static int a() {
int i = 0;
try {
i = 99;
return i;
} finally {
i++;
//i = 3;
}
}
运行结果为 99
//catch中的return结果同样
public static String a() {
String s = "0";
try {
s = "1";
return s;
} finally {
s += "2";
//s = "12";
}
}
运行结果为 1
public static StringBuilder a() {
StringBuilder s = new StringBuilder("0");
try {
s.append("123");
return s;
} finally {
s.append("456");
}
}
运行结果为 0123456
【Java】finally执行顺序及对return返回值的影响
原文:https://www.cnblogs.com/Zeiion/p/14743276.html