什么是在catch块捕获异常
try {
...
} catch (Nullpointerexception e) { ... }
} catch (Exception e) { ... }
和
try {
...
} catch (Exception e) { ... }
假设之间的区别我有一个NullPointerException
,哪一个是最好的?为什么?
什么是在catch块捕获异常
try {
...
} catch (Nullpointerexception e) { ... }
} catch (Exception e) { ... }
和
try {
...
} catch (Exception e) { ... }
假设之间的区别我有一个NullPointerException
,哪一个是最好的?为什么?
问:catch(Nullpointerexception e)
和catch(Exception e)
有什么区别?
答:前者是特定的,后者是一般的。
有时候您想以某种方式处理特定类别的异常(如“NullPointerException”),但有不同的异常类别(如“IOException”)。
一般来说,您应该选择尽可能处理“最窄”的异常,而不是“处理所有事情”。
“NullPointerException”(和“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);
}
你应该使用第二个选项,如果处理异常的代码总是相同的,并且第一个如果你想为不同的行为Exception
s。
在任何情况下,对于NullPointerException
s都需要catch子句是非常罕见的,因为您可以简单地通过代码中的空检查来避免它们(只有在代码中生成NullPointerException
时才需要catch子句你不能控制,例如在图书馆的内部)。
从Java 7开始,你甚至可以这样做:
try {
...
} catch (NullPointerException | AnotherException e) {
...
}
避免复制同一机构不同Exception
类。
在Java 7之前,您必须将Exception
处理代码包含在方法中,并从多个catch子句中调用if以避免其复制。
'Exception'是非常普遍的,'NullPointerException'是特定于'null'对象的,你试图获取属性或访问方法。最好'catch'你的特定异常(在'NullPointerException'的情况下),否则你可能会隐藏你的代码中的一些问题,在捕获一般异常时应该修复这些问题。 – Tom