【发布时间】:2017-04-09 05:29:11
【问题描述】:
我正在阅读一篇关于 Java 中已检查和未检查异常的文章,并找到了这篇文章/链接: https://projectlombok.org/disableCheckedExceptions.html
根据文章,这只是为 javac 开发的一个 hack。
考虑下面的代码 sn-p:
import java.io.*;
class Example
{
public static void main(String args[]) throws IOException
{
FileInputStream fis = null;
fis = new FileInputStream("myfile.txt");
int k;
while(( k = fis.read() ) != -1)
{
System.out.print((char)k);
}
fis.close();
}
}
这里我要写public static void main(String args[]) throws IOException
因为我正在尝试打开一个文件。这里“抛出”子句是必须的。没有它我会得到一个错误。如果我确定我正在打开的文件的存在怎么办。即 myfile.txt 在提到的位置。在某些时候,人们会觉得代码不需要很少的 Checked Exceptions。
Java 是否提供了任何工具来根据需要禁用已检查的异常?
即使做了这么多研究,我也找不到合适的答案。
【问题讨论】:
-
在编写软件时,您永远无法确定某事是否如您所想,它确实如此。因此,如果出现问题,您应该始终抛出异常。为什么要禁用它们,如果一切正常,它永远不会被抛出,否则它应该被抛出并且你不应该禁用它们
-
您现在可以确定了,但如果该文件位置发生变化或不可用(例如磁盘/文件系统损坏)怎么办? Java 在这种情况下应该如何反应?它从
new FileInputStream("myfile.txt");得到了异常,但它不能用它做任何事情......你的代码应该如何进行?它是否应该走得更远并且简单地忽略任何异常?这是自找麻烦。 -
你怎么能确定?
-
我的回答是:你不应该。 Checked Exceptions 来自库,告诉程序员有问题需要恢复。程序员可以决定是否可以通过逻辑来恢复错误,或者是否需要通知程序用户并可能要求其做出决定。如果您关闭检查的异常,您决定忽略该错误。这就是最近刚刚使 ExoMars-lander Schiaparelli 坠毁的程序。
-
有一些工具和库可以简化事情,例如,github.com/google/guava/wiki/… - 但那里的文字也涵盖了为什么这是“有争议的”。
标签: java exception checked-exceptions unchecked-exception