可能重复:
Java 未检查/检查异常说明
我一直在阅读有关 Java 中已检查与未检查异常的辩论,我知道其中的区别,但我不完全清楚我们如何选择其中一个。我们真的有任何选择吗?java不是强制我们使用try catch,以防有可能出现检查异常。我们如何仅使用未经检查的异常来实现应用程序,我们如何处理此类应用程序可能出现检查异常的情况。如果有人愿意用一些关于如何将受检异常转换为未受检异常的代码示例为我解决这个问题,那就太棒了:)
可能重复:
Java 未检查/检查异常说明
我一直在阅读有关 Java 中已检查与未检查异常的辩论,我知道其中的区别,但我不完全清楚我们如何选择其中一个。我们真的有任何选择吗?java不是强制我们使用try catch,以防有可能出现检查异常。我们如何仅使用未经检查的异常来实现应用程序,我们如何处理此类应用程序可能出现检查异常的情况。如果有人愿意用一些关于如何将受检异常转换为未受检异常的代码示例为我解决这个问题,那就太棒了:)
您无法更改内置于您使用的库(包括 JDK)中的已检查异常。
但是,如果您愿意,可以将它们包装起来并重新扔掉。您将对必须尝试/捕获它的方法范围的影响最小化。
并且您可以让您创建的所有自定义异常都扩展RuntimeException
。
已检查的异常意味着在表示不应该发生的意外行为(例如除以 0)但可能出现的情况以及程序员应该注意管理它们的情况下抛出已检查异常。
这是 Java 语言和 Java API 的设计,它运行良好,因为您总是知道在使用提供可能导致您应该处理的特殊情况的功能的 API 时应该关心什么。
我没有看到忘记检查异常的意义,当然你可以封装所有可以引发异常的东西,这样你就可以在内部管理正在发生的事情并抛出一个未经检查的(自定义)异常,但你必须关心这些问题反正。
我能看到的唯一安全的方法是:
class UncheckedFileNotFoundException extends RuntimeException {
..
}
class Foobar {
public static void method(String path) {
try {
FileReader reader = new FileReader(path);
}
catch (FileNotFoundException e) {
// code;
throw new UncheckedFileNotFoundException();
}
}
}
但这并不能解决问题:如果找不到文件,那么调用者应该做相应的事情,并允许他忽略异常或隐藏该方法可能抛出异常的事实(因为你没有商品throws FileNotFoundException
在方法签名中)并没有改善任何东西。