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(); 

  • 相关阅读:
    VFP获取 SQL Server 的数据表、触发器、存储过程、视图等脚本
    VFP控制Excel操作集
    MS SqlServer 的日期格式化函数 Convert
    VFP 图形文件与剪切板互换的API解决方法
    VFP中OCX控件注册检测及自动注册
    VFP检测SQL Server的五个实例代码
    缓存方案笔记
    windows访问控制列表 --ACL(Access Control List)
    cnblog排版
    GIT常用命令
  • 原文地址:https://www.cnblogs.com/zc22/p/1714381.html
Copyright © 2011-2022 走看看