使用 try/catch 而不是多个 IF 语句是否更好?

2022-09-03 09:40:16

例如,在Java中使用块而不是使用多个语句来检查用户输入是更好,更便宜还是更可读?try/catchIf

例如,在解析字符串时,使用 try/catch 块直接解析不是更好,而不是编写多个语句来查找非法字符。Date

在另一个例子中,假设我想读取文件或流,而不是使用,我只是强制方法并等待异常发生。Scanner

这是一种健康的编程方法吗?在虚拟机上是否更便宜?

更新
以下是我在使用DateFormat异常时的意思的一个例子,有时捕获错误可能是一个真正的问题,当这样做时,你能保证你的复杂(通常是不可读的)代码容易出错吗?


答案 1

对流控件使用异常是一种不好的做法。

一些引用:

由于异常是为在特殊情况下使用而设计的,因此很少有 JVM 实现(如果有)会尝试优化其性能。创建、引发和捕获异常通常成本高昂。

在存在不相关的 bug 时,该成语可能会静默地失败并掩盖 bug,从而使调试过程变得非常复杂。

更新:如前所述(我记得我在Josh Bloch的博客中也发现了相同的陈述),使用流控制的例外就像将GOTO用于相同的目的一样。你可以阅读有趣的Dijkstra文章,为什么GOTO是坏的。


答案 2

通常,例外情况适用于...嗯,特殊事件。 适用于在正常事件过程中可能发生的事情。If

因此,通常情况下,如果您想处理没有良好本地解决方案的案例,请使用异常将其向上传播给可以更好地处理它的人。这比 成本要高得多,这是不滥用它的另一个理由。第三个,恕我直言,同样重要的是可读性:在 之后跟踪执行流继续的位置比读取一系列语句要困难得多。if-elsethrowif

如果您想在本地处理案例,大多数时候最好使用简单的.if


推荐