异常处理未经检查与已检查

时间:2013-11-16 06:54:19

标签: java exception-handling

为什么NoSuchElementFoundExceptionRuntimeException又称未选中的错误?我有未经检查的错误是程序员的错误,所以如果用户正在输入要读取的文件并且它存在但是为空。这不是程序员的错,那么这有什么意义呢?

2 个答案:

答案 0 :(得分:1)

我认为这里的“错误”一词有点误导。

已检查的异常通常是程序应该正确捕获和处理的异常,而未经检查的异常通常是程序应该阻止的异常。如果方法包含行throw new NoSuchElementException(),则意味着不应该到达此行,如果到达,则可能意味着某些调用方法中存在错误。

java.util.Scanner的情况下,我想你的想法是什么,当你打电话时,它会抛出NoSuchElementException的原因。 nextLong()并且文件为空,您应该调用hasNextLong()预先检查 这是否安全。您不首先致电hasNextLong()的唯一原因是,如果您真的希望长时间存在(例如,如果您正在阅读与您的程序捆绑在一起的配置文件)。

答案 1 :(得分:1)

  

为什么NoSuchElementFoundException是RuntimeException还是未经检查的错误?

因为这是它的设计方式!

  

我有未经检查的错误是程序员的错误...

一般来说,这是正确的。但是更准确的表征是,检查的异常是您期望能够从最终用户恢复和/或向最终用户报告的异常。

  

...所以如果用户正在输入要读取的文件但它存在但是为空。这不是程序员的错,那么这有什么意义呢?

在这种情况下,它是“程序员错误”,因为他可以(并且可能应该)在调用has*方法之前使用next*方法测试该条件。

但那不是重点......