上文小结
-------------------------
异常分为:
预期的异常和非预期的异常。 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();