如何在不引发Javaexception的情况下从try / catch块中断开

我需要一种方法来从try / catch块的中间打破,而不会引发exception。 与break相似的东西,继续for循环。 这可能吗?

我已经越来越奇怪通过抛出一个自定义的exception(命名为“BreakContinueException”),简单地在其捕获处理程序中没有做任何事情。 我相信这是非常扭曲的。

那么,我还没有意识到任何直接的解决scheme?

正确的做法可能是通过将try-catch块放入一个单独的方法来分解该方法,并使用return语句:

public void someMethod() { try { ... if (condition) return; ... } catch (SomeException e) { ... } } 

如果代码涉及到大量的局部variables,那么也可以考虑使用Stephen C提出的标记块break

 label: try { ... if (condition) break label; ... } catch (SomeException e) { ... } 

你可以在aioobies答案中指定的循环结构或标签break

 public static void main(String[] args) { do { try { // code.. if (condition) break; // more code... } catch (Exception e) { } } while (false); } 

各种方式:

  • return
  • 循环breakcontinue
  • 在带标签的语句中break标签(请参阅@ aioobe的示例)
  • 在switch语句中断开。

  • System.exit() …虽然这可能不是你的意思。

在我看来,如果你只是想尝试一下,“打破标签”是最自然的(最简单的)做法。 但是,从来没有遇到过Java构造的新手Java程序员可能会感到困惑。


那么在有finally的情况下, return工作。 但是你应该避免在finally块里做一个return ,因为语义有点混乱,容易让读者头疼。

有几种方法可以做到这一点:

  1. 将代码移入新的方法并从中return

  2. 将try / catch包裹在do{}while(false); 循环。

这是我通常所做的代码:

  try { ........... throw null;//this line just works like a 'break' ........... } catch (NullReferenceException) { } catch (System.Exception ex) { ......... } 

在catch块中的这个示例中,我改变了计数器的值,它会在block时中断:

 class TestBreak { public static void main(String[] a) { int counter = 0; while(counter<5) { try { counter++; int x = counter/0; } catch(Exception e) { counter = 1000; } } } }k 

如果没有finally ,那么return如何呢?