当前位置: 首页 > 面试题库 >

试捕块的成本是多少?

宋华美
2023-03-14
问题内容

有什么更好的:

 if (condition) {
  try {
   //something
  } catch(SomeEx ex) {}
 }

代替这个:

 try {
   if (condition) {
     //something
   }
 } catch(SomeEx ex) {}

当我输入try块时,JVM实际上会做什么?

编辑:我不想知道在第二个示例中总是要尝试…请回答问题。


问题答案:

在运行时明智地执行,只要没有例外,尝试不会花费您任何费用。只有在发生异常时才花费运行时间。在这种情况下,进行if评估要慢得多。

在JVM规范中,您看到执行路径上没有生成额外的字节码:http
:
//docs.oracle.com/javase/specs/jvms/se7/html/jvms-3.html#jvms-3.12



 类似资料:
  • 问题内容: 如何在catch块中实现代码? 问题答案: 不建议这样做,这可能会在程序中引起严重的问题。例如,如果数据库关闭了怎么办? 但是,这是循环执行的方法: 更新: 令人失望的先生在下面的评论中提到:该方法将执行暂停指定的毫秒数。没有错误是完全随机的,大多数错误只能通过 再次尝试 才能起作用,因为两次尝试之间的时间有所变化。暂停执行线程将为发生这种情况提供更大的机会(例如,数据库引擎有更多的启

  • 问题内容: 在我们的应用程序中将for循环更新为for-each循环时,我遇到了很多这样的“模式”: 代替 我可以看到你获得了集合的性能,因为你不需要在每个循环中调用size()方法。但是有了数组? 因此出现了一个问题:比常规变量贵吗? 问题答案: 否,呼叫或固定时间操作。 由于(的行为类似于)的成员,因此访问它的速度不会比局部变量慢。(这与对的方法的调用非常不同) 无论如何,现代的JIT编译器很

  • 我正在查看Java SE7的新功能,目前我正在: http://docs.oracle.com/javase/7/docs/technotes/guides/language/catch-multiple.html 关于捕获多重功能,当我遇到这个语句时: 注意:如果一个捕捉块处理多个异常类型,那么捕捉参数是隐式最终的。在这个例子中,捕捉参数ex是最终的,因此您不能在捕捉块中给它赋值。 我从未注意到

  • 问题内容: 我只是在学习Java异常处理和Java。我制作了一个Swing GUI,用户将在两个字段中输入整数,然后单击带有算术函数的单选按钮,答案将出现在第三个文本字段中。我想包含一个try / catch块,以在用户将前两个字段之一留为空白或输入除整数以外的内容时捕获异常,以及如果用户尝试将其除以零则输入第二个catch。该窗体可以正常工作,但是不会捕获错误,只能返回堆栈跟踪并使程序崩溃。我感

  • 我想嵌套一个try catch,但内部try中没有捕获。 例如: 这可能吗?这是一种良好的做法吗?