java异常处理06_异常补充

1.方法重写中的异常

原则:子类声明的异常范围不能超过父类声明范围。

  • 父类方法没有声明异常,则子类重写方法也不能声明异常。
class Parent {
	public void show(){}
}
class Child extends Parent {
	public void show() throws Exception {} // 编译错误
}
  • 如果父类抛出一个异常,那么子类只能声明父类的异常或该异常的子类。
class AAException extends Exception {}
class BBException extends AAException {}
class Parent {
	public void show() throws AAException {}
}
class Child extends Parent {
	// public void show() {} // 不声明异常,编译通过
	// 声明父类方法异常的父类,编译错误
	// public void show() throws Exception {} 
	// 声明与父类方法相同的异常或该异常的子类,编译通过
	// public void show() throws AAException {}// 编译通过
	public void show() throws BBException {}// 编译通过
	// 子类声明的异常可以有多个,但是都必须是父类方法相同的异常或该异常的子类
	public void show() throws BBException, AAException {}// 编译通过
}

2.异常链

异常需要封装,但是仅仅封装还是不够的,还需要传递异常。一个系统的友好型的标识,友好的界面功能是一方面,另一方面就是系统出现非预期的情况的处理方式了。

有时候我们会捕获一个异常后再抛出另一个异常,这就形成了一个异常链。

【示例】异常链案例

// 自定义异常
class DenominatorZeroException extends Exception {
	public DenominatorZeroException() {}
	public DenominatorZeroException(String msg) {
		super(msg);
	}
}
// 计算器类
class Calculator {
	// 除法运算
public static int division(int num, int den) throws DenominatorZeroException {
		int result = 0;
		try {
			result = num/den;
		}
		catch(ArithmeticException e) {
			// 抛出一个更详细的异常
			throw new DenominatorZeroException("分母不能为0");
		}
		return result;
	}
}
public class ExceptionTest07 {
	public static void main(String[] args) {
		try {
			// 两个数做除法运算,可以会发生算数异常
			Calculator.division(5, 0);
		} catch (DenominatorZeroException e) {
			e.printStackTrace();
		}
	}
}

ps:如需最新的免费文档资料和教学视频,请添加QQ群(627407545)领取。

发布了92 篇原创文章 · 获赞 0 · 访问量 2618

猜你喜欢

转载自blog.csdn.net/zhoujunfeng121/article/details/104662496