我正在尝试理解使用Java catch块的正确方法。我应该在那里编写业务逻辑还是仅抑制错误?
我的问题在某种程度上与此有关:这个问题。请查看一下。
我理解的是:
如果是未检查异常,最好的方式是以以下方式编写代码:
避免像这样的代码:
我的问题是:什么情况下会抛出checked exception?例如,我使用一个数据库,当查找元素未找到时,会抛出NoSuchElement异常:
那我可以像上面列出的代码那样编写,还是应该使用我的第一个例子中的相同模式?
我的问题在某种程度上与此有关:这个问题。请查看一下。
我理解的是:
如果是未检查异常,最好的方式是以以下方式编写代码:
Integer n = null;
try {
n = Integer.parseInt(reader.readLine());
}
catch(NumberFormatException e){
log.error('Can't parse string');
}
if (n == null) {
n = 0;
}
避免像这样的代码:
Integer n = null;
try {
n = Integer.parseInt(reader.readLine());
}
catch(NumberFormatException ignored){
n = 0;
}
我的问题是:什么情况下会抛出checked exception?例如,我使用一个数据库,当查找元素未找到时,会抛出NoSuchElement异常:
User user = null;
try {
user = User.findById(userId);
} catch (NoSuchCategoryException e) {
log.error('User {} doesn't exist.', userId);
user = new User();
}
user.setUsername('someName');
etc...
那我可以像上面列出的代码那样编写,还是应该使用我的第一个例子中的相同模式?
Exception
,那么“适当的处理”就很难了,因为它可能是任何类型的异常,就像返回Object
的方法可以返回任何东西一样。捕获你知道如何处理的最具体类型的异常(例如NumberFormatException
)。 - Andy Turner