我有这个例子,我真的很想知道如何处理(?)这个.这是一个被检查的例外,对吧?
public void readFile() { File foo = new File("./foo.bar"); try { BufferedReader bufferedReader = new BufferedReader(new FileReader(foo)); } catch (FileNotFoundException e) { // What should I do here? } getDataFromFile(bufferedReader); }
我看到人们在这里做的各种各样的事情.有些打印堆栈跟踪,这是我通常做的,我没有看到它的问题.它给了我需要调试的信息.有些人忽略它们,我认为不应该这样做(我看到JNode OS引导程序忽略了异常).有些人只需在签名中添加throws声明.有些在这个东西中会引起更多的异常! (我想也许这是使用unchecked而不是检查手段?)
此外,如果你添加了throws声明,你将被迫进一步放入try / catch块,如果你有一个非常大的应用程序,这是不方便的.对不起,我只是无能为力.完全.我正在尝试学习优雅和优雅的设计,这是折磨我.
解决方法
这是一个例外,因为不应该首先发生的事情,因此是无法预料的.它处理只有在您的程序出现错误时才会出现的情况.
它是RuntimeException(它是Exception的一个子类)的子类,通常使用IllegalArgumentException,NullPointerException或IllegalStateException来实现
Unchecked runtime exceptions represent conditions that,generally
speaking,reflect errors in your program’s logic and cannot be
reasonably recovered from at run time.
检查异常
是可能发生的事情,因为与系统的其余部分的不可预见的情况.它不在你的直接控制之下,但不一定是一个bug,而是一个可能遇到的情况.
它是异常的子类.
在你的例子中,
文件不存在是您需要处理的情况,即使在生产代码中,如果存在某些条件(磁盘已满),也可能会发生这种情况.这使得它成为一个检查的异常.
处理例外:
Exceptions are intended towards providing a better user-experience. So
you should report the error to the user,and gracefully terminate if
you cannot continue.
>如果确实是您预期的情况,那么您应该可以通知用户该问题,如有必要,请优先终止,或继续下一步.>如果它是一个未经检查的异常,那么你最好的办法是告诉用户,而不是发生意外的错误,因为它不是首先发生的事情,而是将stacktrace报告给你.