之间有什么区别
try {
...
} catch (Nullpointerexception e) { ... }
} catch (Exception e) { ... }
和
try {
...
} catch (Exception e) { ... }
假设我有NullPointerException
,哪一个最好?为什么?
答案 0 :(得分:2)
问:catch(Nullpointerexception e)
和catch(Exception e)
之间有什么区别?
答:前者是具体的,后者是一般的。
有时候你想要处理特定类别的异常(例如" NullPointerException"),但是不同类别的异常(例如" IOException")会有所不同。
一般来说,你应该选择处理最窄的"可能的例外,而不是"处理所有事情"。
" NullPointerException"之间的另一个显着差异(和#34; ArrayIndexOutOfBound")与许多其他异常相比,NullPointerException是unchecked异常。
另请注意,在Java 7中,您可以在同一个catch块中捕获多个不同的异常:
Catching Multiple Exceptions in Java 7
// Pre-Java 7 code:
try {
// execute code that may throw 1 of the 3 exceptions below.
} catch(SQLException e) {
logger.log(e);
} catch(IOException e) {
logger.log(e);
} catch(Exception e) {
logger.severe(e);
}
但现在......
// Java 7 and higher
try {
// execute code that may throw 1 of the 3 exceptions below.
} catch(SQLException | IOException e) {
logger.log(e);
} catch(Exception e) {
logger.severe(e);
}
答案 1 :(得分:1)
如果处理Exception的代码总是相同的话,你应该使用第二个选项,如果你想要不同的Exception
的不同行为,你应该使用第一个选项。
在任何情况下,很少需要NullPointerException
的catch子句,因为你可以在代码中使用null检查来避免它们(只有当{{你才真正需要一个catch子句] 1}}是在您无法控制的代码中生成的,例如在库的内部。)
从Java 7开始,您甚至可以:
NullPointerException
避免为不同的try {
...
} catch (NullPointerException | AnotherException e) {
...
}
类复制相同的主体。
在Java 7之前,您必须在方法中包含Exception
处理代码,并从多个catch子句调用if以避免其复制。