我们经常使用try-catch处理异常,其中也会包含return的情况,但是return在不同的程序体中的执行与否以及执行结果是怎样的我们很多人都不是很清楚。本文将一文搞定所有情况,帮助大家理清return的各种情况。若有遗漏之处欢迎评论区补充,大家一起学习|●´∀`|σ
仅try中return
代码
public class ReturnLab1 {
public static void main(String[] args) {
System.out.println(function1());
System.out.println("==============");
System.out.println(function2());
System.out.println("==============");
System.out.println(function4());
System.out.println("==============");
System.out.println(function5().get("key1"));
}
private static int function1() {
int num = 100;
try {
System.out.println("try print");
return num += 10;
} catch (Exception e) {
System.out.println("catch print");
} finally {
System.out.println("finally print");
if (num > 100) {
System.out.println("num > 100, num = " + num);
}
}
return num;
}
private static String function2() {
try {
System.out.println("try print");
return function3();
} finally {
System.out.println("finally print");
}
}
private static String function3() {
System.out.println("function3 print");
return "function3 returnValue";
}
// try中return num,num返回之前在finally中改变其值,num - 基本类型
private static int function4() {
int num = 100;
try {
System.out.println("try print");
return num += 60;
} catch (Exception e) {
System.out.println("catch print");
} finally {
System.out.println("finally print");
if (num > 100) {
System.out.println("num > 100, num = " + num);
}
num = 180;
}
return 200;
}
private static Map<String, String> function5() {
Map<String, String> map = new HashMap<>();
map.put("key1", "value1");
try {
map.put("key1", "value_try");
return map;
} catch (Exception e) {
map.put("key1", "value_catch");
} finally {
map.put("key1", "value_finally");
map = null;
}
return map;
}
}
结果
try print
finally print
num > 100, num = 110
110
==============
try print
function3 print
finally print
function3 returnValue
==============
try print
finally print
num > 100, num = 160
160
==============
value_finally
结论
function1&2&3:
finally语句在return语句执行之后返回方法结果之前执行。也就是说先执行了一遍return语句但是没有return返回值,再去执行finally中的语句,等finally执行完了再return返回值。
function4&5:
try中return语句执行“一半”后在finally变更其值,基本类型的不会变更成功,非基本类型会改变try中return的结果。
try、finally中有return
代码
public class ReturnLab2 {
public static void main(String[] args) {
System.out.println(function1());
}
private static int function1() {
int num = 100;
try {
System.out.println("try print");
return num += 60;
} catch (Exception e) {
System.out.println("catch print");
} finally {
System.out.println("finally print");
if (num > 100) {
System.out.println("num > 100, num = " + num);
}
return 200;
}
}
}
结果
try print
finally print
num > 100, num = 160
200
结论
try中的return语句正常执行然后正常进入finally执行,但是finally中有return,在finally中就将return执行完毕了,所以try中的return就执行了“一半”。