异常:调用链顺序

在异常调用链当中:异常对象创建顺序(栈内进行),和异常堆栈链显示顺序恰好相反(出栈顺序)

源码:

package lsh.element;

public class ExceptionChains {
    public static void main(String[] args) {
        try {
            method1();
        } catch (Exception2 e) {
            e.printStackTrace();
        }
    }

    public static void method1() throws Exception2 {// 靠近栈顶,所以消息先出栈;后实例化
        try {
            method2();
        } catch (Exception2 e) {
            throw new Exception2("New info from method1", e);
        }
    }

    public static void method2() throws Exception2 {// 靠近栈底,所以消息后出栈;先实例化
        throw new Exception2("New info from method2");
    }

}

class Exception2 extends Exception {
    private static final long serialVersionUID = 1L;
    static {
        System.out.println("Exception2 - static");
    }
    {
        System.out.println("Exception2 - instance");
    }

    Exception2(String msg) {
        super(msg);
        System.out.println("Exception2 - init");
    }

    public Exception2(String message, Throwable cause) {
        super(message, cause);
        System.out.println("Exception2 - init2");
    }
}

执行结果:

Exceptin2 - static
Exception2 - instance
Exception2 - init
Exception2 - instance
Exception2 - init2
lsh.element.Exception2: New info from method1
    at lsh.element.ExceptionChains.method1(ExceptionChains.java:16)
    at lsh.element.ExceptionChains.main(ExceptionChains.java:6)
Caused by: lsh.element.Exception2: New info from method2
    at lsh.element.ExceptionChains.method2(ExceptionChains.java:21)
    at lsh.element.ExceptionChains.method1(ExceptionChains.java:14)
    ... 1 more

以上:上半部分是栈内正常执行顺序;下半部分的异常信息顺序。

转载于:https://www.cnblogs.com/InformationGod/p/9716224.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值