情况一:
try代码块正常执行,无异常,finally代码块无retrun;
代码演示
public class Test38 {
public static void main(String[] args) {
int foo = foo();
System.out.println("foo:" + foo);
}
public static int foo() {
try {
System.out.println("进入逻辑代码");
return 1;
} catch (Exception e) {
System.out.println("抛异常了");
return 2;
} finally {
System.out.println("finally执行了...");
}
}
}
执行结果
分析: 正常返回值
情况二:
try代码块正常执行,无异常,finally代码块有retrun;
代码演示
public class Test38 {
public static void main(String[] args) {
int foo = foo();
System.out.println("foo:" + foo);
}
public static int foo() {
try {
System.out.println("进入逻辑代码");
return 1;
} catch (Exception e) {
System.out.println("抛异常了");
return 2;
} finally {
System.out.println("finally执行了...");
return 3;
}
}
}
执行结果
分析: finally最终执行了,并且在修改了返回值。说明finally执行是在return之前进行的
情况三:
try代码块设置异常,catch捕捉异常,finally代码块无retrun;
代码演示
public class Test38 {
public static void main(String[] args) {
int foo = foo();
System.out.println("foo:" + foo);
}
public static int foo() {
try {
System.out.println("进入逻辑代码");
int a = 3/0;
return 1;
} catch (Exception e) {
System.out.println("抛异常了");
return 2;
} finally {
System.out.println("finally执行了...");
}
}
}
执行结果
分析: finally最终执行了,返回值是异常中指定的返回值。finally在retrun之前执行的。
情况四:
try代码块设置异常,catch捕捉异常,finally代码块有retrun;
代码演示
public class Test38 {
public static void main(String[] args) {
int foo = foo();
System.out.println("foo:" + foo);
}
public static int foo() {
try {
System.out.println("进入逻辑代码");
int a = 3/0;
return 1;
} catch (Exception e) {
System.out.println("抛异常了");
return 2;
} finally {
System.out.println("finally执行了...");
return 3;
}
}
}
执行结果
分析: finally最终执行了,返回值finally中指定的返回值。