Java_异常链

文章介绍了Java中异常处理的机制,特别是异常链的概念。当多个异常在不同层级被抛出时,通过Trowable的cause属性可以记录异常的来源。示例代码展示了如何使用initCause方法开启异常链,以便在捕获异常时能打印出所有异常信息,而不仅仅是最后一个。这种方式类似于递归,有助于调试和问题定位。
摘要由CSDN通过智能技术生成

emm 其实就是异常一直抛出传递,但是最后只会显示最后一个异常,这就是异常链。

需要用到Trowable的cause属性

但是除了Error、Exception和RuntimeException外,都不存在带cause参数的构造器

public class HotelAgeException extends Exception {
   public HotelAgeException(){
      super("18岁以下,80岁以上的住客必须由亲友陪同");
   }
}
package com.imooc.test;

public class TryDemoFive {

	public static void main(String[] args) {
		try {
			testThree();
		} catch (Exception e) {			//这里捕获了 Exception 打印出所有异常【类似递归】
			e.printStackTrace();
		}
	}

	public static void testThree() throws Exception {
		try {
			testTwo();
		} catch (Exception e) {					//这里捕获了 Exception 抛出Exception:我是新产生的异常2
			Exception e1=new Exception("我是新产生的异常2");
			e1.initCause(e);		//开启跟踪异常
			throw e1;				//抛出 e1异常
		}
	}
	public static void testTwo() throws Exception {
		try {
			testOne();
		} catch (HotelAgeException e) {		//这里捕获了 HotelAgeException 抛出Exception:新产生异常1
			throw new Exception("我是新产生的异常1",e);
		}
	}
	public static void testOne() throws HotelAgeException {
		throw new HotelAgeException();
	}
}

结语: 有点像递归,一层一层往下,但记得 用 initCause打开异常链

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值