异常处理背后的主要目的是管理在运行时或编译时的异常。
我们有两种处理异常的方法:
我的问题是为什么我们使用第二种方法,宣布例外?
声明例外有什么用,但我们的目的是处理异常?
已检查和未检查的异常有什么区别?
答案 0 :(得分:2)
您将声明您的方法可以在您不想处理时抛出已检查的异常。例如,FileReader
构造函数被声明为抛出FileNotFoundException
。如果它不是,它将不得不自己处理它(例如通过打印"错误:找不到文件"关于标准错误),你将无法捕获它。
这与您的第二个问题有关:已检查和未检查的异常之间的区别是什么。 FileNotFoundException
是一个经过检查的异常,这意味着您需要决定是否处理它,或者声明您没有处理它(这样您的方法调用者将面临同样的决定)。这确保了异常将在某处处理 - 如果不是,编译器会抱怨。不需要处理未经检查的异常,例如OutOfMemoryError
- Java假定您不应该耗尽内存;因为理论上你可以在任何方法中耗尽内存,所以坚持你必须将每个方法都声明为OutOfMemoryError
的潜在来源是荒谬的。
至于哪个:RuntimeException
和Error
及其所有子类都未选中。 <{1}}及其子类(Exception
除外)将被检查。
答案 1 :(得分:1)
Oracle对有问题与未经检查的例外here的争议有一个有用的记录。
他们的建议是:
这是底线指引:如果可以合理地预期客户 从异常中恢复,使其成为检查异常。如果客户不能这样做 要从异常中恢复的任何内容,请将其作为未经检查的异常。
根据具体情况,在特定方法中处理异常可能没有意义,堆栈中的某些内容可能能够做出正确的操作。
考虑一个FileNotFoundException,有时候在一个方法中捕获异常并解决它(加载一个默认值)可能是有意义的,但也许更高层次的更多关于用户意图的信息将能够做出正确的决定(提醒他们)缺少文件)。