-1

次のコードでは、2 つの例外 [FatalException と MyException] がスローされます。些細な Myexception (上書きしますか?) FatalException を失わせます。どうやって?

この状況をどのように処理しますか?

    try{
        try {
        throw new FatalException("Important");
        } 
    finally
    {              
          throw new MyException("trivial");
    }
    }catch (Exception ex) {
        ex.printStackTrace();
    }
}

内部tryブロックのキャッチクラスなし。

(記事では、Java の欠陥例外について言及しました!) それで、それを克服する方法があるはずですか? 多分最近の基準はそれを変更しましたか?

4

3 に答える 3

2

これをエレガントに処理する方法はありません: finallyJava で制御を引き継いで、好きなことを何でもできるようにし、例外をスローしたブロックから正常に戻ることさえtryできます。

内部例外を処理する必要がある場合は、潜在的に脆弱なコードを大量に記述する必要があります。

Exception important = null;
try{
    try {
        important = new FatalException("Important");
    } finally {
        if (important != null) throw important;
        throw  new MyException("trivial");
    }
} catch (Exception ex) {
    ex.printStackTrace();
}

あなたの最善の解決策は、そのようなコードを書かないことです。

于 2013-05-28T03:33:39.990 に答える
0

これは、実行順序によるものです。throwすべての意図と目的のイニシャルはreturn、メソッドの事実上のステートメント (読み取り: 終了ポイント) ですが、tryブロックを含むブロック内にあるためfinally、ブロック内のコードは、メソッドが戻る前に実行されることfinally保証されています (いくつかの例外があります) 。 . したがって、メソッドreturn/throw別の別の例外がスローされる前に、新しい、より早いメソッドが返されます。

この状況に対処する方法は、決してそれに巻き込まれないことです。これが Java の動作であることに注意し、このコーナーで自分でプログラミングすることは避けてください。

于 2013-05-28T03:28:07.533 に答える
0

これは、例外をネストする方法の正しい構造である可能性があると思います。

try
{
    // Some codes to be tried over here.
}
catch(FatalException fe)
{
    System.out.println("Fatal Exception occurred.");
}
catch(Exception e)
{
    System.out.println("Error! ");
}
catch(MyException me){}

このようにして、それに応じて例外をキャッチできます。

于 2013-05-28T03:32:19.773 に答える