【发布时间】:2014-01-27 02:26:16
【问题描述】:
我正在尝试采用稍微更严格 的方法来编写这个类。与我通常的牛仔编码风格不同,我想先列出方法、变量、cmets ......所有这些爵士乐。
所以现在这里是异常的概念。
我是否应该思考“这个函数中可能出现的所有问题?”并为每个抛出一个异常(如果现有的描述性不够,那么创建一个新的)?这似乎是最精确的选择。
如果思路是“这些事情可能会出错,我会为其他所有事情抛出一个一般性例外。”
“什么都不会出错,我不需要抛出异常,更糟糕的情况是我可以抛出运行时异常,以防万一出错......”
我在这里担心的是错误处理的性能。理想情况下,我可以想象 Java 只是将这些异常转换为漂亮的小 if 语句或某种跳转语句。我想这可能只需要一次手术左右。
我还可以想象 Java 为了抽象而创建了一个 20 次深度调用的马戏团,也许它们的成本很高,我应该假装我重新用 C 编码?
我以一种愚蠢的方式写了这个问题,因为这样对我们双方都更有趣,但这是一个严肃的问题。我敢肯定有一些平衡,也许是经验法则或十法则。您如何看待异常?
编辑: 我并不是建议我使用异常进行处理。我说的是异常的数量和精确度(错误的具体程度如何?)。
【问题讨论】:
-
例外是昂贵的,期间。例外也是例外,因此成本可能无关紧要。
-
例外适用于特殊情况。您不应该太在意它们在运行时花费的几纳秒。相反,您应该关心使代码清晰、可维护和易于使用。
-
是否有证据表明异常只“花费”几纳秒?性能是一个有效的设计问题。
-
我不会担心性能下降,除非您测量到存在问题。我建议您转而担心使代码尽可能清晰和健壮,然后再进行测量。 BTW 异常只有在触发时才会产生成本,而很少触发的简单检查可以通过 CPU 中的分支预测进行优化。
-
我不理解这个社区/行业对忽视绩效的痴迷。当您不为性能而设计时,它就不会执行。也许这对米老鼠应用程序来说很好,但如果你知道你必须扩展,你为什么不计划呢?
标签: java exception exception-handling error-handling runtime-error