try catch finally中带return的执行顺序
A.当try catch finally 代码块中都有return时
- 当程序运行时没有出现异常或者错误,执行顺序,我们先看代码:
public class TryTest {
//启动类
public static void main(String[] args) {
System.out.println(get());
}
public static String get(){
try {
System.out.println("try");
return "111";
} catch (Exception e){
e.printStackTrace();
return "222";
} finally {
System.out.println("finally");
return "333";
}
}
}
以上代码中try catch finall中都有return,执行程序,结果为
try
finally
333
Process finished with exit code 0
从结果可以看出执行顺序为:
try-->try里面的return--->finally--->finally里面的return--->最后得到的返回值时finally的返回值
- 当程序运行时出现异常或者错误 执行顺序,看程序
public class TryTest {
//启动类
public static void main(String[] args) {
System.out.println(get());
}
public static String get(){
try {
System.out.println("try");
//除数不能为0
int i=1/0;
return "111";
} catch (Exception e){
e.printStackTrace();
return "222";
} finally {
System.out.println("finally");
return "333";
}
}
}
运行程序,结果为:
try
catch
finally
333
java.lang.ArithmeticException: / by zero
at com.ning.tryCatchFinally.TryTest.get(TryTest.java:37)
at com.ning.tryCatchFinally.TryTest.main(TryTest.java:12)
Process finished with exit code 0
执行顺序为:
try--->异常-->catch里面的return--->finally--->finally里面的return--->
最后得到的返回值时finally的返回值
B.当catch finally都没有return时
- 当程序运行时没有出现异常和错误 执行顺序
public class TryTest {
//启动类
public static void main(String[] args) {
System.out.println(get());
}
public static String get(){
try {
System.out.println("try");
return "111";
} catch (Exception e){
e.printStackTrace();
} finally {
System.out.println("finally");
}
return "222";
}
}
程序运行结果:
try
finally
111
Process finished with exit code 0
执行顺序:
try-->遇到try里面的return,跳到finally执行--->try里面的return--->返回值是try里面的return
- 当程序运行时出现异常或者错误时 执行顺序
public class TryTest {
//启动类
public static void main(String[] args) {
System.out.println(get());
}
public static String get(){
try {
System.out.println("try");
int 1=1/0;
return "111";
} catch (Exception e){
e.printStackTrace();
} finally {
System.out.println("finally");
}
return "222";
}
}
执行结果:
try
catch
finally
222
java.lang.ArithmeticException: / by zero
at com.ning.tryCatchFinally.TryTest.get(TryTest.java:37)
at com.ning.tryCatchFinally.TryTest.main(TryTest.java:12)
Process finished with exit code 0
执行顺序:
try--->出现异常---->执行catch---->执行finally----跳出try/catch/finally,
返回try/catch之外的返回值
C.当只有try 和 finally时
public static String get(){
try {
System.out.println("try");
int i=1/0;
return "111";
} finally {
System.out.println("finally");
}
}
执行程序结果
try
finally
Exception in thread "main" java.lang.ArithmeticException: / by zero
at com.ning.tryCatchFinally.TryTest.get(TryTest.java:37)
at com.ning.tryCatchFinally.TryTest.main(TryTest.java:12)
得出结论:程序运行出现异常或者错误,抛出异常后,异常之后的代码将执行不到。但是finally里面的代码一定会执行