Java异常Exception的打印与分级层次

Exception的打印与分级层次

参考

https://blog.csdn.net/weixin_42653621/article/details/82494465?ops_request_misc=%7B%22request%5Fid%22%3A%22162729289216780366584462%22%2C%22scm%22%3A%2220140713.130102334.pc%5Fall.%22%7D&request_id=162729289216780366584462&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-8-82494465.first_rank_v2_pc_rank_v29&utm_term=异常堆栈传递&spm=1018.2226.3001.4187

层次

吞异常
参考:https://blog.csdn.net/weixin_42653621/article/details/82494465

	public void testThrowFileEx() throws FileNotFoundException{
		throw new FileNotFoundException();
	}
	
	public void testThrowClassEx() throws ClassNotFoundException{
		try {
			testThrowFileEx(); 
		} catch (FileNotFoundException e) {
			throw new ClassNotFoundException();
		}
	}

最后只剩下ClassNotFoundException,异常被吞了。

建议做法:
1、当我们不需要转义异常的,就直接抛出调用函数的异常即可。

2、当我们需要转义异常的,就需要先在抛异常前,先打印堆栈信息。

  在具体项目中使用日志工具打印堆栈信息。

3、真实项目中,当我们需要转义异常的,例如从AException转为BException,这个时候有两个处理方式:

 3.1、当BException构造函数可以传递Throwable的时候,直接throw new BException(e);即可。
 3.2、当BException构造函数不可以传递Throwable的时候,就需要自己调用initCause()初始化BException异常引起的源异常。
 这里就涉及到Exception的cause对象问题了,cause对象是指我们的异常是由于什么异常引起的。

在这里插入图片描述
图中e2、e3是通过throwable继承而来,e5是通过initCause继承而来,打印时有所区别

打印

注意打印时候不要丢掉堆栈信息,需要打印堆栈的时候用第一种方式打印。

// 打印出完整的e的堆栈。如果是如上吞异常情境下抛出的,只会打打印最后的异常;同时可能引起
log.error(e);
// 打印出e的描述性信息,而不是堆栈信息
log.error(e.toString());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值