执行顺序:
①先执行return操作
②确定返回值,但是此时并不会立刻返回。(如果返回值是非引用类型(int等),即使在finally改值也没用,也只会返回第一步中计算出来的返回值。)
③执行finally中的操作(如果该finally操作中也包含有return操作则会直接返回,也就是说正常的return会被finally的return覆盖)
④finally里面的内容执行完了,程序则会返回第二步的返回值。
●正常程序
public class FinallyTest1 {
public static void main(String[] args) {
System.out.println(test11());
}
public static String test11() {
try {
System.out.println("try block");
return test12();
} finally {
System.out.println("finally block");
}
}
public static String test12() {
System.out.println("return statement");
return "after return";
}
}
运行结果为:
try block return statement finally block after return
●finally里有return
public class FinallyTest2 {
public static void main(String[] args) {
System.out.println(test2());
}
public static int test2() {
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);
}
return 200;
}
// return b;
}
}
运行结果是:
try block finally block b>25, b = 100 200
●finally里改变int值
public class FinallyTest3 {
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