为什么NoSuchElementFoundException
是RuntimeException
又称未选中的错误?我有未经检查的错误是程序员的错误,所以如果用户正在输入要读取的文件并且它存在但是为空。这不是程序员的错,那么这有什么意义呢?
答案 0 :(得分:1)
我认为这里的“错误”一词有点误导。
已检查的异常通常是程序应该正确捕获和处理的异常,而未经检查的异常通常是程序应该阻止的异常。如果方法包含行throw new NoSuchElementException()
,则意味着不应该到达此行,如果到达,则可能意味着某些调用方法中存在错误。
在java.util.Scanner
的情况下,我想你的想法是什么,当你打电话时,它会抛出NoSuchElementException
的原因。 nextLong()
并且文件为空,您应该调用hasNextLong()
预先检查 这是否安全。您不首先致电hasNextLong()
的唯一原因是,如果您真的希望长时间存在(例如,如果您正在阅读与您的程序捆绑在一起的配置文件)。
答案 1 :(得分:1)
为什么NoSuchElementFoundException是RuntimeException还是未经检查的错误?
因为这是它的设计方式!
我有未经检查的错误是程序员的错误...
一般来说,这是正确的。但是更准确的表征是,检查的异常是您期望能够从最终用户恢复和/或向最终用户报告的异常。
...所以如果用户正在输入要读取的文件但它存在但是为空。这不是程序员的错,那么这有什么意义呢?
在这种情况下,它是“程序员错误”,因为他可以(并且可能应该)在调用has*
方法之前使用next*
方法测试该条件。
但那不是重点......