zoukankan      html  css  js  c++  java
  • 谈谈Exception,什么时候抛出?什么时候接住? 二

    上文小结

    ------------------------- 

    异常分为:

    预期的异常和非预期的异常。 ExpectedException, UnexpectedException.

    预期的异常分为:

    1. 没有给定符合要求的输入。FerificationFailedException

    2. 方法内部由于外部因素产生的异常。UnexpectedExternalException

    3. 方法内部运算结果没有符合预期的输出结果 UnhandledResultException。

    方法是否抛出异常,分为:

    1.  方法不允许抛出异常。直接采用try catch 封锁,记录日志。(void等、线程操作等)

    2.  方法返回值能够代表异常,同样直接采用 try catch, 记录日志,返回值。 (bool操作等)

    允许抛出异常的方法,异常处理包括:

    1. 所有子类的输入验证异常全部被拦截,当前方法的输入验证,根据策略抛出。

    2. 所有外部异常全部抛出

    3. 所有没有符合运算结果的异常,根据策略抛出。 

    4. 所有非预期异常抛出

    NoException 

    当前类如果不会抛出异常,就标注NoException.(一般不可能。所以显示标注)所以

    当前类,不抛出异常;子类异常全部拦截。 

    FerificationFailedException 

    任何方法都隐含了这个异常,可以是显示的抛出,也有可能是隐含的抛出(代码没有抛出,但是分析的时候会标注抛出) 

    当前类标注了 VerificationSucceed,则当前类不抛出;子类拦截;一旦出现异常,就属于非预期异常处理。

    当前类没有标注,则继续传递,不做任何处理。 最终拦截的类,如果拦截到这个异常,属于非预期异常,定位在第一个没有标注的类。


    UnexpectedExternalException

    遇到了一律抛出。 

    UnhandledResultException 

    当前类抛出;子类抛出策略同输入验证;如果标注了verificationsucceed还是抛出,则是bug,属于非预期异常。

    ----------------------------------------------------

    代码设计:

    1. 设计3种exception,

    2. 设计2个标签,NoException / VerificationSucceed 

    3. 设计一个处理决策: ExceptionHandler.负责处理异常、抛出异常。

    Exceptions.Throw();

    Exceptions.Handle(); 

  • 相关阅读:
    LeetCode 977 有序数组的平方
    LeetCode 24 两两交换链表中的节点
    LeetCode 416 分割等和子集
    LeetCode 142 环形链表II
    LeetCode 106 从中序与后序遍历序列构造二叉树
    LeetCode 637 二叉树的层平均值
    LeetCode 117 填充每个节点的下一个右侧节点
    LeetCode 75 颜色分类
    redhat 7.4 挂载ntfs格式的u盘并且使用
    redhat 查看CPU frequency scaling(CPU频率缩放)
  • 原文地址:https://www.cnblogs.com/zc22/p/1714381.html
Copyright © 2011-2022 走看看