Java异常机制深入理解(3)

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)遇到异常并匹配到异常:

执行顺序如图:

Java异常机制深入理解

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)遇到异常却没有匹配到异常:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/914cf97844744c6fd557f4ba37e2a6af.html