异常传播链

描述

方法之间的调用以及throws抛出异常,使异常的传播形成反向异常传播链。如果在抛出异常的方法中没有完全捕获异常(异常没被捕获,或异常被处理后重新抛出了新异常),那么异常将从发生异常的方法逐渐向外传播,首先传给该方法的调用者,该方法调用者再次传给其调用者…直至main方法,如果main方法依然没有处理该异常,JVM抛出该异常,打印异常跟踪栈信息,终止程序。

案例

public class Test {
    private static int[] arr = {1,2,3,4};

    //方法A用throws抛出异常
    public static void funA(int index) throws ArrayIndexOutOfBoundsException{
        System.out.println("方法funA");
        System.out.println(arr[index]);
    }

    //方法B调用方法funA,抛出异常
    public static void funB(int index) throws ArrayIndexOutOfBoundsException{
        System.out.println("方法funB");
        funA(index);
    }

    //方法C调用方法funB,处理异常
    public static void funC(int index){
        System.out.println("方法funC");
        try {
            funB(index);
        }catch (ArrayIndexOutOfBoundsException e){
            e.printStackTrace();
        }finally {}
    }

    //主方法
    public static void main(String[] args) {
        funC(-2);
    }
}

案例分析

案例第5行方法funA()抛出ArrayIndexOutOfBoundsException;第13行方法funB()调用方法funA(),但没有处理方法funA()抛出的异常;第11行用throws继续抛出ArrayIndexOutOfBoundsException,第20行方法funC()调用方法funB(),使用try…catch…finally语句处理funB()抛出的ArrayIndexOutOfBoundsException。

运行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值