受检查异常和非受检查异常的区别

古城微笑少年丶 2023-06-04 03:56 129阅读 0赞

文章目录

      • 一. 受检查异常和非受检查异常的区别
      • 二. 代码示例

一. 受检查异常和非受检查异常的区别

所有的异常,都继承自java.lang.Throwable
衍生出来是子类是Error和Exception

Exception 的子类又分为RuntimeException和CheckedException(例如IOException)

受检查异常是你必须要捕获的异常,否则无法通过编译, 而非受检查异常你可以捕获或者不捕获.

非受检查的异常,只能打印日志,而做不了其他的事情.

受检查异常, 不足的地方:

  1. 异常是主逻辑的补充逻辑, 修改一个补充逻辑, 会导致补充逻辑的修改. (会在主逻辑处增加异常的捕获操作), 会影响主逻辑代码的规范原则.
  2. 实现类的变更会影响调用者破坏了封装性.

减少受捕获异常的缺点的方法就是把受捕获的异常, 转为非受捕获的异常, 把自定义的异常, 改成继承自RuntimeException.

当受检查的异常,威胁了系统的健壮性的时候, 则必须要处理, 不能转换为运行时异常, 其他情况下,可以转换为非受检查的异常.

二. 代码示例

代码示例
首先自定义一个受检查的异常类SafeException ,因为继承了Exception , 因此该异常为受检查的异常.

  1. public class SafeException extends Exception {
  2. public SafeException() {
  3. }
  4. public SafeException(String message) {
  5. super(message);
  6. }
  7. }

再定义一个受检查的异常RejectException

  1. public class RejectException extends Exception {
  2. public RejectException() {
  3. }
  4. public RejectException(String message) {
  5. super(message);
  6. }
  7. }

定义一个接口IUser ,抛出SafeException和RejectException

  1. public interface IUser {
  2. void changePwd() throws SafeException,RejectException;
  3. }

在测试类中调用方法user.changePwd();,可以看到有编译错误.
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzMjI5NjY5_size_16_color_FFFFFF_t_70
解决方法为如下2种

  1. 抛出异常

    public class ExceptionDemo {

  1. public static void main(String[] args) throws RejectException, SafeException {
  2. IUser user = null;
  3. user.changePwd();
  4. }
  5. }
  1. try catch

    public class ExceptionDemo {

  1. public static void main(String[] args){
  2. IUser user = null;
  3. try {
  4. user.changePwd();
  5. } catch (SafeException e) {
  6. e.printStackTrace();
  7. } catch (RejectException e) {
  8. e.printStackTrace();
  9. }
  10. }
  11. }

发表评论

表情:
评论列表 (有 0 条评论,129人围观)

还没有评论,来说两句吧...

相关阅读