如何解决Java中的try-catch和loop异常
| 在Java中,以下各项(在性能方面)有什么区别?for (int i = 0; i < count; i++) {
try {
// code that throws Exception
} catch (Exception e) {
e.printStackTrace();
}
}
和
try {
for (int i = 0; i < count; i++) {
// code that throws Exception
}
} catch (Exception e) {
e.printStackTrace();
}
解决方法
您可以同时使用两者,但这都取决于您要执行的操作。如果要在循环完成一次后继续执行,则可以采用第一种方法。如果要捕获异常,则停止执行循环,然后执行第二个循环。在性能方面,这一切都取决于您要如何处理。
, 在第一个版本中,如果遇到异常,则循环继续;在第二个版本中,循环在catch块之后继续。那是那些代码片段中最重要的区别。
, 主要区别在于,在代码的第一段中,即使try块中引发了异常,并且捕获到该异常,for循环的执行仍继续。在第二个片段中,如果引发异常,则退出for循环。这是因为整个循环都在try块内。
, 不,我很确定从这里的性能来看绝对没有区别(忽略有关循环的明显事实)。在这两种情况下,您都将在例外表中仅创建一个条目-只有PC值(即例外有效的范围)会有所不同。
也就是说,如果您假设以下是例外表,则唯一会更改的是x,y和z值。
Exception table:
from to target type
x y z <Class java.lang.Exception>
, 既然您问过这两个版本的代码的性能,我想起了“ Practical Java”(Addison-Wesley 2000),它在实践23中提出了建议:将try / catch块放在循环之外。原因是在关闭JIT编译器的情况下在JVM上运行代码。在这种情况下,缺少运行时JIT优化会导致操作码中出现额外的分支,从而导致性能降低。您可以在此处阅读2014年的JIT文档:http://www.oracle.com/technetwork/articles/java/architect-evans-pt1-2266278.html
, 除了您在逻辑上的区别与持续的追求。两者之间没有明显区别
try {
lots of stuff which might not throw any exception
something that throws exception
} catch (Exception e) {
}
和
lots of stuff which might not throw any exception
try {
something that throws exception
} catch (Exception e) {
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。