Java_异常链

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打开异常链

posted @ 2023-03-05 22:11  咸瑜  阅读(16)  评论(0编辑  收藏  举报