finally{} 代码块用于回收资源(关闭文件、关闭数据库、关闭管道)的代码。finally代码块不管是否出现异常,都必须���行( finally块唯一不执行的情况System.exit(0) jvm正常退出。)
3.1.1 try-catch-finally的执行顺序第一种:catch块没有return语句
(1)没有遇到异常:
try块内的代码——>finally块内的代码——>finally块后的代码
(2)遇到异常并匹配到异常:
try块内的代码——>catch块内的代码——>finally块内的代码——>finally块后的代码
public class Test01 {
public static void main(String[] args) {
try {
int a=1/0;
System.out.println("try");
} catch (Exception e) {
System.out.println("catch");
}finally {
System.out.println("finally");
}
System.out.println("程序正常运行结束");
}
}
结果:
1 catch 2 finally 3 程序正常运行结束
(3)遇到异常却没有匹配到异常:
try块内的代码——>finally块内的代码——>程序中断运行
public static void main(String[] args) {
try {
int a=1/0;//会抛出ArithmeticException
System.out.println("try");
} catch (NullPointerException e) {
System.out.println("catch");
}finally {
System.out.println("finally");
}
System.out.println("程序正常运行结束");
}
结果:
1 Exception in thread "main" finally 2 java.lang.ArithmeticException: / by zero 3 at Test1.Test01.main(Test01.java:8)
第二种:catch块有return语句
(1)没有异常
try块内的代码——>finally块内的代码——>try块内的return语句
public class Test01 {
public static int test() {
try {
int a=2*2;
System.out.println("try");
return a;
} catch (Exception e) {
System.out.println("catch");
return 0;
}finally {
System.out.println("finally");
}
}
public static void main(String[] args) {
System.out.println(test());
System.out.println("程序正常运行结束");
}
}
结果:
1 try 2 finally 3 4 4 程序正常运行结束
(2)遇到异常并匹配到异常:
执行顺序如图:
public class Test01 {
public static int test() {
try {
int a=2/0;
System.out.println("try");
return a;
} catch (Exception e) {
System.out.println("catch");
return 0;
}finally {
System.out.println("finally");
}
}
public static void main(String[] args) {
System.out.println(test());
System.out.println("程序正常运行结束");
}
}
结果:
1 catch 2 finally 3 0 4 程序正常运行结束
(3)遇到异常却没有匹配到异常: