如何在不引发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
- 循环
break
或continue
- 在带标签的语句中
break
标签(请参阅@ aioobe的示例) - 在switch语句中断开。
…
-
System.exit()
…虽然这可能不是你的意思。
在我看来,如果你只是想尝试一下,“打破标签”是最自然的(最简单的)做法。 但是,从来没有遇到过Java构造的新手Java程序员可能会感到困惑。
那么在有finally
的情况下, return
工作。 但是你应该避免在finally
块里做一个return
,因为语义有点混乱,容易让读者头疼。
有几种方法可以做到这一点:
-
将代码移入新的方法并从中
return
-
将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
如何呢?