2

違いは何ですか:

while( true ) {
    try {
        // something 
    } catch( Exception e ) {
        break; 
    }
}

try {
    while( true ) {
    // something 
    // break; // eventually
    }
} catch( Exception e ) {

}

前者は反復ごとにtry-catchを実行しますか、それともコンパイラーは同じコードを生成しますか?どちらが好ましいですか?

編集:休憩; 必要がないため、2番目の例ではcatchブロックから削除されました。

4

1 に答える 1

6

違いは、最初の1つは期待どおりにコンパイルおよび動作し(例外が発生するとループから抜け出す)、2つ目はコンパイルされないことです。

コンパイラエラーは、break cannot be used outside of a loop or a switchほとんど自明です(breakループの外側で(構文的に)使用しようとしているので、許可されていません)。

これを説明するために例を変更します。

try {
    while( true ) {
    // something 
    // break; // eventually
    }
    /* --> more code, that could throw an exception <-- */
} catch( Exception e ) {
    break; 
}

コメントを挿入した場所で例外が発生した場合、何から抜け出す必要がありますか?

質問に明確に答えるには:

前者は反復ごとにtry-catchを実行しますか、それともコンパイラーは同じコードを生成しますか?

はい、前者はすべての反復でtry/catchブロックを実行します。

どちらが好ましいですか?

最初のものは、明らかに。

break推奨される方法は、catchブロックにキーワードを含まない2番目の方法です。Renがコメントで指摘したように、例外が発生すると、catchブロック(ロギングエラーなど)が実行され、catchブロックの下のコードが実行されます。breakキーワードは必要ありません。

于 2013-02-26T23:08:22.030 に答える