例外をスローせずにtry/catchブロックの途中から抜け出す方法が必要です。 forループのbreak and continueに似た何か。これは可能ですか?
私は単純なキャッチハンドラーで何もしないカスタム例外( "BreakContinueException"という名前)をスローすることについて奇妙な考えを持っています。これは非常にねじれていると確信しています。
だから、私が知らない単純な解決策はありますか?
適切な方法は、おそらくtry-catchブロックを別のメソッドに入れてメソッドを分解し、returnステートメントを使用することです。
public void someMethod() {
try {
...
if (condition)
return;
...
} catch (SomeException e) {
...
}
}
コードに多くのローカル変数が含まれる場合、 Stephen C で示唆されているように、ラベル付きブロックからbreak
を使用することも検討できます。
label: try {
...
if (condition)
break label;
...
} catch (SomeException e) {
...
}
ループ構成からのbreak
または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の例を参照)break
switchステートメントの場合。...
System.exit()
...それはおそらくあなたが言っていることではないでしょう。私の意見では、「just try/catchから抜け出したい」場合、これを行う最も自然な(最もゆがんだ)方法は "label to break"です。しかし、初心者Javaに遭遇したことのないプログラマーJava構文。
しかし、ラベルはあいまいですが、私の意見では、break
を使用できるようにコードをdo ... while (false)
でラップするのは悪い考えです。これは、初心者と初心者を混同します。初心者(および初心者でもない!)にとっては、ラベル付きステートメントについて学ぶ方が良いでしょう。
ところで、return
から抜け出す必要がある場合は、finally
が機能します。ただし、return
ブロックでfinally
を実行することは避けてください。セマンティクスが少し混乱し、読者に頭痛の種を与えやすいためです。
いくつかの方法があります:
コードを新しいメソッドに移動し、そこからreturn
Try/catchをdo{}while(false);
ループでラップします。
Catchブロックのこのサンプルでは、counterの値を変更し、ブロック中にブレークします:
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
これは私が通常行うコードです:
try
{
...........
throw null;//this line just works like a 'break'
...........
}
catch (NullReferenceException)
{
}
catch (System.Exception ex)
{
.........
}
return
がなければfinally
はどうでしょう