为什么 NumberFormatException 是 runtime?

2022-09-01 14:48:06

运行时异常表示协定已损坏(如 NPE),如果代码没有错误,则永远不应引发。它始终指示代码中的错误(与断言相同,但断言用于内部类错误,而运行时用于类的客户端错误)。

永远不要捕获运行时异常。

另一方面,已检查的异常是签名的一部分,应进行捕获和处理。它们可能指示用户输入错误或外部资源问题(如 )。IOException

有了所有这些,我无法理解为什么是运行时?NumberFormatException


答案 1

首先,谁告诉你的

永远不要捕获运行时异常

对Java知之甚少。不要听他们的话 - 他们错了。

NumberFormatException 是运行时异常:选择未选中的异常,因为它们表示编程错误。在调用 Integer.parseInt() (例如)之前,可以知道 String 一个有效的整数,例如,这里只有一种方法:

if (str.matches("^\\d{1,8}$") {
    int myInt = Integer.parseInt(str); // will never throw NumberFormatException 
}

因此,可以将其视为编程错误以获得一个 - 程序员选择首先检查。

如果您对要解析的字符串的完整性/质量没有信心,则很容易捕获:

try {
    // parse your string
} catch (NumberFormatException e) {
    // do something about it
}

使其成为运行时的另一个原因是,如果您确信不会获得运行时,例如,如果您完全信任String数据源,则不会用可能不必要的块来混淆代码。try/catch


答案 2

NumberFormatException在解析配置文件时也可能被抛出,在这种情况下,这将是程序员的错误。在解析用户输入时,您通常使用哪个会抛出一个选中的.NumberFormatParseException