我遇到这样的情况,需要将一个String
解析为一个int
,但我不知道如何处理NumberFormatException
。如果我没有捕获它,编译器不会抱怨,但我想确保我正确处理了这种情况。
private int getCurrentPieceAsInt() {
int i = 0;
try {
i = Integer.parseInt(this.getCurrentPiece());
} catch (NumberFormatException e) {
i = 0;
}
return i;
}
我想简化我的代码,就像这样。编译器没有问题,但线程在NumberFormatException
处停止。
private int getCurrentPieceAsInt() {
int i = 0;
i = Integer.parseInt(this.getCurrentPiece());
return i;
}
Google CodePro希望我以某种方式记录异常,我认为这是最佳实践。
private int getCurrentPieceAsInt() {
int i = 0;
try {
i = Integer.parseInt(this.getCurrentPiece());
} catch (NumberFormatException e) {
i = 0;
e.printStackTrace();
}
return i;
}
我希望这个方法在当前对象不是数字或无法解析时返回0
。如果我未显式捕获NumberFormatException
,那么它会不会分配变量i
?或者Integer.parseInt()
有一些默认值返回吗?通常风格规定,如果我捕获了异常,我应该在某个地方记录它。但我不想记录它。这个异常有时被抛出是正常操作,这也让我不太舒服。然而,我找不到一个函数来告诉我是否
Integer.parseInt()
会抛出一个异常。所以我的唯一选择似乎就是调用它并捕获异常。
parseInt
的javadoc没有什么帮助。以下是我想知道的具体问题:
- 是否有一种方法可以在调用之前告诉我
Integer.parseInt()
是否会抛出NumberFormatException
?那么我将没有问题记录这个异常,因为它不应该发生。 - 如果我 simply 不捕获异常,变量会不会被赋值?然后当它不是数字并且没有捕获异常时,我将简单地将其初始化为我想要的值。
- 是否有一种方式可以明确地标记异常,表明我不在乎它?我在想这会是类似于
AWTEvent.consume()
的东西。如果是这样,那么我将这样做,以便Google CodePro不会将其视为“未记录”。
tryParse()
方法的话,我会很喜欢。我想我明白为什么没有这个方法,因为这基本上意味着要做两次工作。此外,当我尝试它时,未捕获的NumberFormatException
会立即终止线程。我已经更新了问题以反映这一点。 - Erick Robertson