2

別の try ブロック内で try catch ステートメントを使用する価値はありますか?

    try{
        // some code...
        try{
            // some code...
        }catch(Exception ex){
            ex.printStackTrace();
        }
        // some code...
    }catch(Exception ex){
        ex.printStackTrace();
    }
4

8 に答える 8

3

はい。内側のブロックで非常に具体的な例外をキャッチしたい場合があります。これを処理してブロックの残りの部分に戻すことができます...

ただし、通常は、キャッチオールではなく、内部ブロックのより具体的な例外でのみこれを行います。

于 2013-05-29T08:46:34.567 に答える
1

もちろん、それは理にかなっています。2 番目の 'some code' ブロックが例外をスローした場合でも、3 番目の 'some code' ブロックを実行することは理にかなっています。ただし、3 番目のブロックが 2 番目のブロックの結果に依存しないようにする必要があります。

于 2013-05-29T08:53:26.763 に答える
1

私が考えることができる理由の 1 つは、いくつかの例外がスローされる可能性のあるコード ブロックを実行することです。そのうちのいくつかはアプリケーションのフローを中断する必要があり、いくつかはすべきではありません。

public void storePerson(Person input){
  try{
    validatePerson(); // if person is not valid, don't go through the flow
    try{
      writeInLog("I will be storing this person: " + input.getName());
    }
    catch(Exception e){
      System.out.println("Should have generated a logFile first, but hell, this won't put the flow in jeopardy.");
    }
    performPersistenceTasks(input);

  }
  catch(Exception e){
    e.printStackTrace();
    throw new Exception("Couldn't store the person");
  }
}
于 2014-04-15T12:35:37.567 に答える
1

ネストされたキャッチで別の例外をキャッチすれば、それは理にかなっています。ネストされたものを使用して、一般的な例外ではなく、より具体的な例外をキャッチします。

于 2013-05-29T08:47:42.703 に答える