文章目录
一. 受检查异常和非受检查异常的区别
- 一. 受检查异常和非受检查异常的区别
- 二. 代码示例
所有的异常,都继承自java.lang.Throwable 衍生出来是子类是Error和Exception
Exception 的子类又分为RuntimeException和CheckedException(例如IOException)
受检查异常是你必须要捕获的异常,否则无法通过编译, 而非受检查异常你可以捕获或者不捕获.
非受检查的异常,只能打印日志,而做不了其他的事情.
受检查异常, 不足的地方:
- 异常是主逻辑的补充逻辑, 修改一个补充逻辑, 会导致补充逻辑的修改. (会在主逻辑处增加异常的捕获操作), 会影响主逻辑代码的规范原则.
- 实现类的变更会影响调用者破坏了封装性.
减少受捕获异常的缺点的方法就是把受捕获的异常, 转为非受捕获的异常, 把自定义的异常, 改成继承自RuntimeException.
当受检查的异常,威胁了系统的健壮性的时候, 则必须要处理, 不能转换为运行时异常, 其他情况下,可以转换为非受检查的异常.
二. 代码示例代码示例 首先自定义一个受检查的异常类SafeException ,因为继承了Exception , 因此该异常为受检查的异常.
public class SafeException extends Exception {
public SafeException() {
}
public SafeException(String message) {
super(message);
}
}
再定义一个受检查的异常RejectException
public class RejectException extends Exception {
public RejectException() {
}
public RejectException(String message) {
super(message);
}
}
定义一个接口IUser ,抛出SafeException和RejectException
public interface IUser {
void changePwd() throws SafeException,RejectException;
}
在测试类中调用方法user.changePwd();
,可以看到有编译错误. 解决方法为如下2种
- 抛出异常
public class ExceptionDemo {
public static void main(String[] args) throws RejectException, SafeException {
IUser user = null;
user.changePwd();
}
}
- try catch
public class ExceptionDemo {
public static void main(String[] args){
IUser user = null;
try {
user.changePwd();
} catch (SafeException e) {
e.printStackTrace();
} catch (RejectException e) {
e.printStackTrace();
}
}
}