假设我们正在讨论扩展基本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();
}
我想知道在哪种情况下我必须使用前者?
答案 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!");
}