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

原文地址:https://www.cnblogs.com/zc22/p/1714381.html