Java中trycatchfinally执行顺序

Posted CodingDGSun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中trycatchfinally执行顺序相关的知识,希望对你有一定的参考价值。

try、catch和finally

  • try块:用于捕获异常。

    • 后面可以有0个或多个catch块。
    • 只能有0个或1个finally块。
    • try块后面,如果没有catch块,则后面必须有一个finally块。
    • 执行代码捕获异常后,进入catch块,try中出现异常代码处后面的代码不会再继续执行。
  • catch块:用于处理处理try中捕获的异常。

    • 可以有多个catch块,进入一个catch块后,执行完毕后,如果有finally块,则进入finally块。即使后面还有catch块,也不会再进入其他catch块。
  • finally块:无论是否捕获或处理异常,finally块中的代码都会被执行。

    • 当try块中或者catch块中遇到return语句时,先执行完finally里面的代码后,再执行return返回语句。

可以有多个catch块,并且try块后面,只能有0个或1个finally块

public static void main(String[] args) {
    try {
        System.out.println("try...");
    }catch (ArithmeticException e){
        System.out.println("ArithmeticException...");
    }catch (NullPointerException e){
        System.out.println("NullPointerException...");
    }
    finally {
        System.out.println("finally...");
    }
}

//输出结果:
//try...
//finally...

try块后面,如果没有catch块,则后面必须有一个finally

public static void main(String[] args) {
    try {
        System.out.println("try...");
    }
    finally {
        System.out.println("finally...");
    }
}

//输出结果:
//try...
//finally...

执行代码捕获异常后,进入catch块,try中出现异常代码处后面的代码不会再继续执行

public static void main(String[] args) {
    try {
        System.out.println("try...");
        int a = 0;
        String str = null;
        System.out.println(str.toString());
        a = a / 0;
    } catch (ArithmeticException e) {
        System.out.println("ArithmeticException...");
    } catch (NullPointerException e) {
        System.out.println("NullPointerException...");
    } finally {
        System.out.println("finally...");
    }
}

//输出结果:
//try...
//NullPointerException...
//finally...

当try块中或者catch块中遇到return语句时,先执行完finally里面的代码后,再执行return返回语句。

public static void main(String[] args) {
    try {
        System.out.println("try...");
        return;
    } catch (ArithmeticException e) {
        System.out.println("ArithmeticException...");
    } catch (NullPointerException e) {
        System.out.println("NullPointerException...");
    } finally {
        System.out.println("finally...");
    }
}

//输出结果:
//try...
//finally...
public static void main(String[] args) {
    try {
        System.out.println("try...");
        int a = 0;
        a = a / 0;
    } catch (ArithmeticException e) {
        System.out.println("ArithmeticException...");
        return;
    } catch (NullPointerException e) {
        System.out.println("NullPointerException...");
    } finally {
        System.out.println("finally...");
    }
}

//输出结果:
//try...
//ArithmeticException...
//finally...

以上是关于Java中trycatchfinally执行顺序的主要内容,如果未能解决你的问题,请参考以下文章

trycatchfinally 执行顺序

Java笔试面试总结—trycatchfinally语句中有return 的各类情况

try finally 执行顺序问题

异常和trycatchfinally的简记

js中trycatchfinally的执行规则

TryCatchFinally+return 总结