[英]What is the difference between these two ways of handling an exception
第一个:
for (i = 0; i < 100; i++)
{
try { n = s.pop(); }
catch (EmptyStackException e) { . . . }
try { out.writeInt(n); }
catch (IOException e) { . . . }
}
第二个:
try
{
for (i = 0; i < 100; i++)
{
n = s.pop();
out.writeInt(n);
}
}
catch (IOException e) { . . . }
catch (EmptyStackException e) { . . . }
我知道通常我们使用第二种处理方式,但我试图理解为什么它更好。
在第一个示例中,如果您没有在 catch 块中抛出另一个异常,则循环将运行所有可能的多个异常。 否则,您将退出第一个异常的循环。
第二个示例将退出第一个异常的循环。
放置 try/catch 结构的位置绝对没有性能差异。 在内部,它们作为代码范围表在调用方法时创建的结构中实现。 当方法正在执行时,除非发生抛出异常,否则 try/catch 结构完全不在画面中,然后将错误的位置与表进行比较。
好吧,实际上只有在代码无异常运行时才没有性能差异。
其他答案中提到的差异,并不总是正确的。 这完全取决于实现,特别是您将在 catch 块中执行的操作。 如果你在 catch 块中做了一些任务或者什么都不做,然后重新抛出异常,在这种情况下循环肯定会中断。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.