尝试try块内的catch语句

时间:2013-05-29 08:44:14

标签: java

在另一个try块中使用try catch语句会有任何值吗?

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

8 个答案:

答案 0 :(得分:3)

是。您可能希望在内部块中捕获一个非常特定的异常,您可以处理并返回到块的其余部分...

你通常只会在内部块中使用更具体的异常,而不是捕获。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

通常情况下,如果您获得不同的例外情况,只需向catch添加try/catch语句,尊重hierarchical order ...

例如:

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

}

答案 3 :(得分:1)

是的,

try
{
 int i=1;

 try
       {


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

 j=i/1;

   ...               //continue execution
   ...

  }
  catch(Exceptione e)
{

}

答案 4 :(得分:1)

当然有道理。如果第二个“某些代码”块抛出异常,那么无论如何都可以执行第三个“某些代码”块。但是,必须确保第三个块不依赖于第二个块的任何结果。

答案 5 :(得分: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");
  }
}

答案 6 :(得分:0)

有时可能会出现块的一部分可能导致一个错误并且整个块本身可能导致另一个错误的情况。在这些情况下,嵌套式尝试很有用

答案 7 :(得分:0)

一般来说,我会避免它。它使用Exceptions太多来处理程序控制流程,它看起来很难看。 IMO你需要让Exception块尽可能平坦。仅在特殊情况下使用此嵌入式try / catch。