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

  • 相关阅读:
    myeclipse项目转到eclipse中
    线程防止冲突
    Flex FLOWBOX 添加RichText 不换行
    win7 修复系统文件
    一月学习socket tcp通信总结
    flex
    [调试技巧] 如何利用WinDbg找出程序崩溃的位置
    Class Struct 转Byte Serialize Marshal 区别
    C#捕获摄像头进行拍照和录像资料总结
    WebBrowser控件使用技巧分享
  • 原文地址:https://www.cnblogs.com/zc22/p/1714381.html
Copyright © 2011-2022 走看看