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

我能想到的一个原因是,您想要运行一段代码,其中可能会引发多个异常,其中一些应该会破坏应用程序的流程,而有些则不应该。

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

是的,

try
{
 int i=1;

 try
       {


       j=i/0;      //caught error
       }
catch(Exception e)
 {
 }

 j=i/1;

   ...               //continue execution
   ...

  }
  catch(Exceptione e)
{

}
于 2013-05-29T08:51:52.667 回答
1

如果您在嵌套的 catch 中捕获不同的异常,这可能是有意义的。我会使用嵌套的异常来捕获更具体的异常,而不是通用异常。

于 2013-05-29T08:47:42.703 回答
1

Normally if you'll get different Exceptions, you just add catch statements to your try/catch, respecting the hierarchical order...

For example:

try{

}catch(IOException io){ //This catch is if you know that a IOException can occur

}catch(Exception e){ //This catch is if other exception not expected happens

}
于 2013-05-29T08:50:01.003 回答
1

当然,这是有道理的。如果第二个“某些代码”块引发异常,则无论如何执行第三个“某些代码”块是有意义的。但是,必须确保第三个块不依赖于第二个块的任何结果。

于 2013-05-29T08:53:26.763 回答
0

一般来说,我会避免它。它过多地使用异常来处理程序控制流,而且看起来非常丑陋。IMO 您需要使异常块尽可能平坦。仅在特殊情况下使用此嵌入式 try/catch。

于 2013-05-29T08:51:19.267 回答
0

Sometimes a situation may arise where a part of a block may cause one error and the entire block itself may cause another error. Nested try is useful in these cases

于 2013-05-29T08:49:57.627 回答