【面试】Java异常链

什么是异常链?

百度百科:异常链是一种面向对象编程技术,指将捕获的异常包装进一个新的异常中并重新抛出的异常处理方式。原异常被保存为新异常的一个属性(比如cause)。这个想法是指一个方法应该抛出定义在相同的抽象层次上的异常,但不会丢弃更低层次的信息。

大白话:处理异常1的同时会抛出异常2.

通过自定义异常实现异常链?

1.自定义两个异常类

 

//自定义两个异常
class MyException1 extends Exception{
	private static final long serialVersionUID = 1L;
	
}
//第二个异常
class MyException2 extends Exception{
	private static final long serialVersionUID = 1L;
	public MyException2() {
		super();
	}
	public MyException2(Throwable throwable){
		super(throwable);
	}
}

 

 

 

2.在两个方法中分别调用两个异常类

 

//该方法抛出第二个异常
	public void fun2() throws MyException2{
		try {
			fun1();
		} catch (MyException1 e) {
			e.printStackTrace();
			throw new MyException2();
		}
	}
	
	//该方法抛出一个异常
	public void fun1() throws MyException1{
		throw new MyException1();
	}

 

 

 

3.调用fun2,查看打印信息

【面试】Java异常链_第1张图片

 

可以看出控制台打印出两个异常信息,但是【百度百科】中对异常链的描述有一句:原异常被保存为新异常的一个属性(比如cause)。

所以,我们还要让MyException2 能够持有MyException1的环境信息,形成了一条链,我们也成为异常链。

4.实现异常链

修改fun2代码如下;

 

//该方法抛出第二个异常
	public void fun2() throws MyException2{
		try {
			fun1();
		} catch (MyException1 e) {
			e.printStackTrace();
			throw new MyException2(e);
		}
	}throw new MyException2(e);
		}
	}

 

5.运行,查看修改后的打印信息

【面试】Java异常链_第2张图片

这样,异常2就保存了异常1的信息,形成了一条链。

完整代码

 

package cn.com.test05;

public class MainTest01 {
	
	public static void main(String[] args){
		
		MainTest01 m = new MainTest01();
		try{
			/*
			 * 调用fun2
			 * fun2里面有fun1,fun1抛出异常1
			 * 捕捉异常1处理后,抛出异常2
			 */
			m.fun2();
		}catch(MyException2 e){
			e.printStackTrace();
		}
		
	}
	
	//该方法抛出第二个异常
	public void fun2() throws MyException2{
		try {
			fun1();
		} catch (MyException1 e) {
			e.printStackTrace();
			throw new MyException2(e);
		}
	}
	
	//该方法抛出一个异常
	public void fun1() throws MyException1{
		throw new MyException1();
	}
	
}



//自定义两个异常
class MyException1 extends Exception{
	private static final long serialVersionUID = 1L;
	
}
//第二个异常
class MyException2 extends Exception{
	private static final long serialVersionUID = 1L;
	public MyException2() {
		super();
	}
	public MyException2(Throwable throwable){
		super(throwable);
	}
}

 

 

 

 

 

你可能感兴趣的:(JAVA笔试面试)