Java异常处理流程

Java异常处理流程

java中处理异常的代码块构成一般如下

class TestException{
    String testEx(){
        try {
           System.out.println("捕获异常");
        }catch (java.lang.Exception E){
           System.out.println("处理发生异常");
        }finally {
            System.out.println("无论异常是否发生必定执行");
        }
        return "异常区结束";
    }
}

代码中的finally代码块主要用于关闭必须要关闭的资源。比如在处理I/O的时候,一但发生异常。如果I/O流无法被关闭就会长时间占用系统资源。

异常处理的基本流程是,程序的控制权从发生异常的地方转移到处理异常的地方,而finally代码块无论是否发生异常都必须执行,那么就会出现一个问题,catch代码块中出现了return语句,finally语句是否还会执行?fianlly语句块中有return代码的执行流程又是什么样?

问题1:返回语句在catch中,finally中没有返回语句的执行流程分析

修改上述代码,如下:

class TestException{
    String testEx(){
        try {
            int i= 4/0; //模拟异常发生
           System.out.println("捕获异常");
        }catch (java.lang.Exception E){
           System.out.println("处理发生异常");
           return "catch";
        }finally {
            System.out.println("无论异常是否发生必定执行");
        }
        return "异常区结束";
    }
}

执行方法后的测试结果:
image
可以看到,在catch语句块中加了return语句后,finally语句块依旧会执行。并且在执行完毕finally语句块后,在从catch语句块中进行函数值的返回。

问题2:返回语句在catch中,finally中有返回语句的执行流程分析

修改上述代码如下:

class TestException{
    String testEx(){
        try {
            int i= 4/0; //模拟异常发生
           System.out.println("捕获异常");
        }catch (java.lang.Exception E){
           System.out.println("处理发生异常");
           return "catch";
        }finally {
            System.out.println("无论异常是否发生必定执行");
            return "finally";
        }
    }
}

测试执行结果:
image
从测试结果得出,此时的异常流程处理,是先在catch中处理异常,遇到return语句后,程序控制权跳转到finally语句代码块中,如果finally代码块中有return语句,则程序直接return到函数调用位置。

问题23:catch中,finally中都没有返回语句的执行流程分析

修改上述代码如下:

class TestException{
    String testEx(){
        try {
            int i= 4/0; //模拟异常发生
           System.out.println("捕获异常");
        }catch (java.lang.Exception E){
           System.out.println("处理发生异常");

        }finally {
            System.out.println("无论异常是否发生必定执行");

        }
    return "代码结束";
    }
}

程序运行结果分析:
image
如果异常处理中没有函数返回语句,那么会直接执行异常处理块外面的代码。

posted @   黑猫魔法师  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示