From 86f996b04c98df1f4f41917937736f29fa4c0709 Mon Sep 17 00:00:00 2001 From: Joe <736777445@qq.com> Date: Tue, 5 Mar 2019 13:57:53 +0800 Subject: [PATCH] =?UTF-8?q?Update=2069.=20=E5=8F=AA=E9=92=88=E5=AF=B9?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E7=9A=84=E6=83=85=E5=86=B5=E4=B8=8B=E6=89=8D?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E5=BC=82=E5=B8=B8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 69. 只针对异常的情况下才使用异常.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/69. 只针对异常的情况下才使用异常.md b/69. 只针对异常的情况下才使用异常.md index 87f4469..662df8d 100644 --- a/69. 只针对异常的情况下才使用异常.md +++ b/69. 只针对异常的情况下才使用异常.md @@ -27,7 +27,7 @@ for ( Mountain m : range )   实际上基于异常的模式比标准模式要慢得多。在我本地的机器上,对于一个有 100 个元素的数组进行遍历,标准模式比基于异常的模式快了 2 倍。 -  基于异常的循环模式不仅模糊了代码的意图,讲起了它的性能,而且它还不能保证正常工作!如果出现了不相关的 bug,这个模式会悄悄的消失从而掩盖了这个 Bug,极大地增加了调试过程的复杂性。假设循环体的计算过程中调用了一个方法,这个方法执行了对某个不相关数组的越界访问。如果使用合理的循环模式,这个 Bug 会产生未被捕捉的异常,从而导致线程立即结束,并产生完整的堆栈轨迹。如果使用这个被误导的基于异常的循环模式,与这个 Bug 相关的异常将会被捕捉到,并且被错误的解释为正常的循环终止条件。 +  基于异常的循环模式不仅模糊了代码的意图,降低了它的性能,而且它还不能保证正常工作!如果出现了不相关的 bug,这个模式会悄悄的消失从而掩盖了这个 Bug,极大地增加了调试过程的复杂性。假设循环体的计算过程中调用了一个方法,这个方法执行了对某个不相关数组的越界访问。如果使用合理的循环模式,这个 Bug 会产生未被捕捉的异常,从而导致线程立即结束,并产生完整的堆栈轨迹。如果使用这个被误导的基于异常的循环模式,与这个 Bug 相关的异常将会被捕捉到,并且被错误的解释为正常的循环终止条件。   这个例子的教训很简单:顾名思义,**异常应该只用于异常的情况下;他们永远不应该用于正常的程序控制流程。** 一般的,应该优先使用标准的、容易理解的模式,而不是那些声称可以提供更好性能的、弄巧成拙的方法。即使真的能够改进性能,面对平台的不断改进,这种模型的性能优势也不可能一直保持。然而这种过度聪明的模式带来的微妙 Bug 和维护的痛苦将依旧存在。