0

finallyブロックでエラーをスローするとどうなりますか?対応するcatch句の1つで処理されますか?

4

7 に答える 7

6

finallyブロックに別のtry-catchブロックを配置した場合のみ。それ以外の場合は、他のエラーと同じです。

于 2011-04-04T06:20:51.797 に答える
2

最終的に自分自身をブロックするまで、例外を処理しません。

public static void main(String[] args) throws Exception {
        try {
            System.out.println("In try");
        } catch (Exception e) {
            System.out.println("In catch");
        } finally{
            throw new Exception();
        }

    }

上記のコードは例外をスローしますが、次のように実行すると機能します。

public static void main(String[] args){
        try {
            System.out.println("In try");
        } catch (Exception e) {
            System.out.println("In catch");
        } finally{
             try{
                     throw new Exception();
                 }catch(Exception e){}
        }

    }
于 2011-04-04T06:24:29.857 に答える
2

finallyまたはcatchブロック内にtry-catchブロックを含める必要があります。

例えば:

try {
    // your code here
} finally {
    try {
        // if the code in finally can throw another exception, you need to catch it inside it
    } catch (Exception e) {
       // probably not much to do besides telling why it failed
    }
} catch (Exception e) {
    try {
        // your error handling routine here
    } catch (Exception e) {
       // probably not much to do besides telling why it failed
    }
}
于 2011-04-04T06:27:17.210 に答える
1

いいえ。それはcatchによってキャッチされ、try / catch/finally全体が別のtry/catch内にネストされます。それ以外の場合、例外は関数からスローされ、関数の呼び出し元によって処理されます。

于 2011-04-04T06:20:15.213 に答える
1

いいえ、そうではありません。これをfinallyブロックで処理するか、メソッドの説明で適切なthrow宣言を定義する必要があります。

于 2011-04-04T06:21:09.830 に答える
1

いいえ、catchブロックは、対応するtryブロック内でスローされた例外のみをキャッチできます。ブロックはキャッチできませんfinally。(もちろん、そのfinallyブロックが別のブロック内にある場合でも、そのtryブロックのcatch句は引き続き使用されます。) try

JLSの関連セクションは14.20.2です。そこにリストされている各フローには、次のようなものがあります。

何らかの理由でfinallyブロックが突然完了した場合、同じ理由でtryステートメントが突然完了します。

catchつまり、ブロックに関連付けられている句finallyで例外を処理する試みはありません。

于 2011-04-04T06:23:57.350 に答える
0

実行の順序は通常、ステートメントの順序によって直接示されます。1. try、2。指定された順序で例外をキャッチします(1つのcatchのみが実行されます)。3。最後に。

したがって、finallyブロックが実行されると(returnステートメントまたは例外がtryまたはcatchブロックでスローされた場合でも、これは常に当てはまることに注意してください)、tryステートメントの実行は最後のフェーズにあるため、キャッチできません。さらにスローアブル。すでに指摘したように、例外はスタックのさらに下の場所で処理する必要があります(または、視点によっては上になります;))。

于 2011-04-04T06:27:59.520 に答える