【发布时间】:2020-08-07 11:09:39
【问题描述】:
我不明白什么时候使用try-catch,它们有什么问题,特别是这个项目(57 java-effective) 有人可以解释一下吗
// Horrible abuse of exceptions. Don't ever do this!
try {
int i = 0;
while(true)
range[i++].climb();
} catch(ArrayIndexOutOfBoundsException e) {
}
for (Mountain m : range)
m.climb();
“因为异常是为异常情况而设计的,所以 JVM 实现者几乎没有动力让它们像显式测试一样快。 将代码放在 try-catch 块中会抑制现代 JVM 实现可能执行的某些优化。 循环遍历数组的标准习语不一定会导致冗余检查。现代 JVM 实现将它们优化掉。”
最后,如果我们不能在每个块中使用 try-catch,我如何在没有 catch 块的情况下将崩溃记录到服务器
【问题讨论】:
-
它并没有说不要使用 try-catch 块。它说不要使用它们来代替“显式测试”。即在这种情况下使用传统的 for 循环
for (int i = 0; i < range.length; ++i)。这不是一个很好的例子。本质上,他们的目的是不将异常用于正常的流量控制,而仅用于异常所有情况。 -
我发布了一个带有解释和示例的答案,对您有帮助吗?
-
@Steyrix 谢谢你,但你没有回答我所有的问题
-
您的意思是“如何在没有 catch 块的情况下将崩溃记录到服务器”?因为这是我唯一没有回答的问题
-
请说明您的问题,以便我们为您提供帮助
标签: java try-catch effective-java