如何捕获Java中Catch块中出现的异常

时间:2016-05-10 10:57:28

标签: java exception try-catch

我需要处理由Java中的Catch块代码引发的异常

7 个答案:

答案 0 :(得分:0)

您可以在方法或块中的任何位置使用try catch块,因此您也可以在catch块中编写try catch。

try {

// master try

}catch(Exception e){
// master catch

try {
// child try in master catch

}catch(Exception e1){
// child catch in master catch

}
}//master catch

答案 1 :(得分:0)

示例,“处理”异常:

try 
{
 // try do something
} 
catch (Exception e) 
{
    System.out.println("Caught Exception: " + e.getMessage());
    //Do some more
}

更多信息请参阅:请参阅:https://docs.oracle.com/javase/tutorial/essential/exceptions/catch.html

但是如果你想在try catch中找到另一个catch,你可以执行以下操作:

 try 
     {
           //Do something
     } 
     catch (IOException e) 
     {
            System.out.println("Caught IOException: " + e.getMessage());

            try
            {
                 // Try something else
            }
            catch ( Exception e1 )
            {
                System.out.println("Caught Another exception: " + e1.getMessage());                     
            }
     } 

小心嵌套的try / catch,当你的try catch变得复杂/大时,考虑将它拆分成自己的方法。例如:

try {
    // do something here
}
catch(IOException e)
{
    System.out.println("Caught IOException: " + e.getMessage());
    foo();
}

private void foo()
{
    try {
        // do something here (when we have the IO exception)
    }
    catch(Exception e)
    {
        System.out.println("Caught another exception: " + e.getMessage());
    }
}

答案 2 :(得分:0)

按照惯常的尝试/捕捉情况进行操作:

bind-address=0.0.0.0

答案 3 :(得分:0)

您可以在主catch块中添加新的try catch块。

try
      {
         int b=10/0;
      }catch(ArithmeticException e)
      {
         System.out.println("ArithmeticException occurred");
         try
         {
         int c=20/0;
         }catch(ArithmeticException e1)
         {
            System.out.println("Another ArithmeticException occurred");
         }
      }

答案 4 :(得分:0)

我认为最干净的方法是创建捕获异常的方法。但是,它可能非常依赖于您正在处理的代码的情况和类型。

您要问的一个示例是关闭@IBAction func btnPressPlay(sender: AnyObject) { if videoPlayerViewController.moviePlayer.playbackState == MPMoviePlaybackState.Playing { self.videoPlayerViewController.moviePlayer.stop() } else { self.videoPlayerViewController.moviePlayer.play() } } - Stream - try块中打开的catch。例如:

finally

这里我说明了package a; import java.io.BufferedOutputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; public class Main { public static void main(String[] args) { OutputStream out = null; try { out = new BufferedOutputStream(new FileOutputStream("temp.txt")); } catch (FileNotFoundException e) { e.printStackTrace(); //TODO: Log the exception and handle it, // for example show a message to the user } finally { //out.close(); //Second level exception is // occurring in closing the // Stream. Move it to a new method: closeOutPutStreamResource(out); } } private static void closeOutPutStreamResource(OutputStream out){ try { out.close(); } catch (IOException e) { // TODO: log the exception and ignore // if it's not important // OR // Throw an instance of RuntimeException // or one of it's subclasses // which doesn't make you to catch it // using a try-catch block (unchecked) throw new CloseOutPutStreamException(e); } } } class CloseOutPutStreamException extends RuntimeException{ public CloseOutPutStreamException() { super(); } public CloseOutPutStreamException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { super(message, cause, enableSuppression, writableStackTrace); } public CloseOutPutStreamException(String message, Throwable cause) { super(message, cause); } public CloseOutPutStreamException(String message) { super(message); } public CloseOutPutStreamException(Throwable cause) { super(cause); } } 块中发生第二级异常的情况,但同样适用于finally块中发生的异常。

在我看来,catch等编写方法很有用,因为它们打包了一个锅炉板代码,用于处理非常常见的异常,并且它们使您的代码更加优雅。

此外,您可以选择closeOutPutStreamResource并将catchcloseOutPutStreamResource中的例外记录到您计划的其他图层。但是将这些不重要的检查异常包装到throw中而不需要捕获会更加优雅。

希望这会有所帮助。

答案 5 :(得分:0)

我没有级联try / catch(就像大多数其他答案一样),我建议你调用另一个方法,执行所需的操作。通过这种方式,您的代码将更易于维护 在这个方法中,放一个try / catch块来保护代码。

示例:

public int classicMethodInCaseOfException(int exampleParam) {
    try {
        // TODO
    }
    catch(Exception e)
    {
        methodInCaseOfException();
    }
}


public int methodInCaseOfException()
{
    try {
        // TODO
    }
    catch(Exception e)
    {
        //TODO
    }
}

答案 6 :(得分:0)

当catch块引发Exception时,不必嵌套嵌套try-catch块,如此处的所有答案所示。您可以使用try-catch封闭调用方方法以处理该异常。