如果使用合理地循环模式,这个Bug会产生未被捕捉的异常,从而导致线程立即结束,产生完整的堆栈轨迹。如果使用了这个被误导的基于异常的循环模式,与这个Bug相关的异常将会被捕捉,并且被错误的解释为正常的循环终止条件。 这个例子的教训很简单:顾名思义,异常应该只用于异常的情况下,它们永远不应该用于正常的控制流。一般的...
异常应该只用于异常的情况下;它们永远不应该用于正常的控制流。
对于本条目来说,其根本解释就是“异常只用于异常的情况下,而不是用于正常的控制流”,只有确实无法提前控制,只能进行检查的情况才去使用异常。 类似的约束 : 如果是有限状态类,尽量使用 枚举去限制,而不是使用 int String 等状态作为参数,然后去检查,再去抛出异常...
如果类中具有「状态相关」(state-dependent)的方法,即只有在特定的不可预知的条件下才可以被调用的方法,这个类往往也应该具有一个单独的「状态测试」(