多个Catch块与基本异常类中的捕获

时间:2016-09-17 13:00:45

标签: java exception

假设我们正在讨论扩展基本Exception类的所有异常,

是:

 try {
some code;                    
} catch (InterruptedException e) {
    e.printStackTrace();
   } catch (ExecutionException e) {
     e.printStackTrace();
     }
catch (MyOwnException e)
{
     e.printStackTrace();
}

同样如下:

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

我想知道在哪种情况下我必须使用前者?

3 个答案:

答案 0 :(得分:2)

在第二个选项中,Exception将捕获所有异常,而不仅仅是第一个选项中明确列出的异常。
如果您只想捕获选定的异常,请使用第一个选项,并对每个异常做出不同的响应。
如果您只想捕获所选的异常,并对所有异常具有相同的响应,则可以使用:

catch (InterruptedException | ExecutionException | MyOwnException e)
{
    e.printStackTrace();
}

答案 1 :(得分:1)

最好使用Exception子类而不是Exception类。如果您使用Exception,那么调试将很困难。 这是一个供参考的链接 http://howtodoinjava.com/best-practices/java-exception-handling-best-practices/#3

答案 2 :(得分:1)

如果您有多个例外情况,这些例外情况都会延伸到......我们会说IndexOutOfBoundsException,那么除非您特别想要为StringIndexOutOfBoundsException或其他子类打印不同的消息应该抓住IndexOutOfBoundsException。另一方面,如果从Exception类扩展了多个异常,则至少在JDK 1.8中创建multi-catch语句是正确的格式:

try {
    // Stuff
}catch(InterruptedException | ClassNotFoundException | IOException ex) {
    ex.printStackTrace();
}

您创建多个catch语句的前一个是您尝试执行我之前说过的操作。

try {
    // Stuff
}catch(StringIndexOutOfBoundsException se) {
    System.err.println("String index out of bounds!");
}catch(ArrayIndexOutOfBoundsException ae) {
    System.err.println("Array index out of bounds!");
}catch(IndexOutOfBoundsException e) {
    System.err.println("Index out of bounds!");
}