为什么NumberFormatException是运行时?

时间:2011-08-26 13:47:38

标签: java exception numberformatexception

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

永远不应该捕获运行时异常。

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

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

6 个答案:

答案 0 :(得分:10)

首先,无论谁告诉你

  

永远不应该捕获运行时异常

对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
}

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

答案 1 :(得分:3)

解析配置文件时也可能抛出

NumberFormatException,在这种情况下,它将是程序员错误。在解析用户输入时,您通常使用NumberFormat来抛出已检查的ParseException

答案 2 :(得分:2)

NumberFormatException扩展了IllegalArgumentException。这是一个运行时异常的原因是完全有可能破坏采用String并返回Number的方法的约定。如果我传入123D并且没有对数据进行适当的验证,那么这将是一个适当的非法参数。

答案 3 :(得分:0)

为什么NumberFormatException是运行时错误?好吧,如果你有一个用户输入一个值的对话框,并且该值不是数字但是被解析,那么你可能想知道这一点。最好的方法是例外吗?也许不是,但它就是它。

答案 4 :(得分:0)

从某种意义上说,NumberFormatException 编译时异常。但是,当程序运行它时,格式字符串解析器/编译器抛出它而不是被Java编译器抛出。这同样适用于Pattern和正则表达式的其他用法;你的程序正在运行解析器/编译器。

答案 5 :(得分:-1)

我认为运行时异常是在计算机的硬件执行操作时发生的,然后意识到这是不可能的,因此返回并抛出异常为时已晚,从而导致程序崩溃。对于数字格式异常,计算机尝试读取例如int的字符串。硬件尝试将char存储在int变量中,这是不可能的。基本上所有涉及硬件的东西,例如除以0