try catch执行过程分析

Posted 無昂博奥

tags:

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

本篇文章带大家聊聊try catch的执行过程,有时候在开发的过程中,try代码里如果出现异常,catch后的步骤还会继续执行吗?以及finally的使用。

下面来分析一下几种使用场景:

场景一:

try代码块中出现异常后,系统会继续执行catch代码块的程序。catch代码块外的代码也会继续被执行。

/**
 * Created By wuang
 * Create Date 2022/7/12 17:47
 * Description:
 */
public class TryCatchDemo 
    public static void main(String[] args) 
        try 
            int[] myNumbers = 1, 2, 3;
            System.out.println(myNumbers[10]);
         catch (Exception e) 
            System.out.println("Something went wrong.");
        
        System.out.println("catch 之后的代码执行了");
    

输出结果:

场景二

try代码块中抛出的异常被catch捕获,此时需要注意,catch捕获的异常必须是try抛出的。此时程序会继续执行catch代码块外的代码。否则请看场景三

/**
 * Created By wuang
 * Create Date 2022/7/12 17:47
 * Description:
 */
public class TryCatchDemo 
    public static void main(String[] args) 
        try 
          //抛出异常
            throw  new ArrayIndexOutOfBoundsException();
//            int[] myNumbers = 1, 2, 3;
//            System.out.println(myNumbers[10]);
         catch (ArrayIndexOutOfBoundsException e) 
            System.out.println("Something went wrong.");
        
        System.out.println("catch 之后的代码执行了");
    


执行结果:

场景三

try抛出的异常,在catch中没有捕获,则此时程序不会继续执行catch代码块内的代码,也不会执行catch代码块之外的代码。

/**
 * Created By wuang
 * Create Date 2022/7/12 17:47
 * Description:
 */
public class TryCatchDemo 
    public static void main(String[] args) 
        try 
            throw  new ArrayIndexOutOfBoundsException();
//            int[] myNumbers = 1, 2, 3;
//            System.out.println(myNumbers[10]);
         catch (NullPointerException e) 
          //此处捕获的异常,不是ArrayIndexOutOfBoundsException,则catch中的
            System.out.println("Something went wrong.");
        
        System.out.println("catch 之后的代码执行了");
    


执行结果:

finally代码块

针对上面出现的三种场景,finally中代码块都会被执行。针对场景三,finally代码块外的代码不会被执行了,这就和场景三的结论相吻合。

/**
 * Created By wuang
 * Create Date 2022/7/12 17:47
 * Description:
 */
public class TryCatchDemo 
    public static void main(String[] args) 
        try 
            throw  new ArrayIndexOutOfBoundsException();
//            int[] myNumbers = 1, 2, 3;
//            System.out.println(myNumbers[10]);
         catch (NullPointerException e) 
            System.out.println("Something went wrong.");
        
        finally 
            System.out.println("finally 中的程序执行了.");
        
        System.out.println("catch 之后的代码执行了");
    

到此try catch的过程就验证完毕,在排查问题时知道此流程会帮助你更快的定位问题。

以上是关于try catch执行过程分析的主要内容,如果未能解决你的问题,请参考以下文章

请简述JAVA中 try-catch-finally 语句的执行过程 简单明了 好的话 加分(曹苇提问)

try-catch-finally的执行顺序

try-catch-finally的执行顺序

try-catch语句

2个简单实例让你快速理解try-catch的用法

try-catch-finally执行顺序