? ? ? ? finally是在任何情况下都会执行的:
? ? ? ?①当try中有return语句的时候,测试如下:
class="java" name="code">package study.base_study;
/**
* Created by Taoyongpan on 2017/11/26.
* 测试 try catch finally的执行顺序
*/
public class TryTest {
public static int test1(){
try {
return 1;
}catch (Exception e){
e.printStackTrace();
}finally {
System.out.println("finally方法");
}
return 0;
}
public static void main(String[] args){
System.out.println(test1());
}
}
?测试结果如下:
?
finally方法
1
?
Process finished with exit code 0
?
②当 报错抛出异常的时候,测试如下:
package study.base_study;
/**
* Created by Taoyongpan on 2017/11/26.
* 测试 try catch finally的执行顺序
*/
public class TryTest {
public static int test1(){
try {
return 1/0;
}catch (Exception e){
e.printStackTrace();
}finally {
System.out.println("finally方法");
}
return 0;
}
public static void main(String[] args){
System.out.println(test1());
}
}
?测试结果如下:
finally方法
java.lang.ArithmeticException: / by zero
0
at study.base_study.TryTest.test1(TryTest.java:11)
at study.base_study.TryTest.main(TryTest.java:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
?
Process finished with exit code 0
?
③当finally方法中也有 return语句的时候,try中的return将不再执行,测试如下:
package study.base_study;
/**
* Created by Taoyongpan on 2017/11/26.
* 测试 try catch finally的执行顺序
*/
public class TryTest {
public static int test1(){
try {
return 1;
}catch (Exception e){
e.printStackTrace();
}finally {
System.out.println("finally方法");
return 0;
}
}
public static void main(String[] args){
System.out.println(test1());
}
}
?测试结果如下:
finally方法
0
?
Process finished with exit code 0
?