首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >捕获Java中的异常

捕获Java中的异常
EN

Stack Overflow用户
提问于 2009-02-10 23:17:36
回答 7查看 3.5K关注 0票数 4

Java中有一些预定义的异常,如果抛出这些异常,就会报告发生了严重的情况,您最好改进代码,而不是在catch块中捕获它们(如果我理解正确的话)。但我仍然发现许多程序中我有以下几点:

代码语言:javascript
运行
复制
} catch (IOException e) {
     ...
} catch (FileNotFoundException e) {
     ....
}

我认为IOException和FileNotFoundException正是这样的异常,我们不应该在catch块中捕获它们。人们为什么要这么做?像这样抓到他们是不是更好?无论如何,Java编译器都会对这类问题发出警告。

谢谢。

EN

回答 7

Stack Overflow用户

发布于 2009-02-10 23:19:35

不,捕获IOExceptionFileNotFoundException没有什么错--如果你能真正处理这些异常的话。这就是重要的一点--面对这种异常,你真的能继续下去吗?有时你可以--通常是在服务器的顶层,例如,一个请求失败并不意味着下一个请求就不能继续。在客户端应用程序中较少使用,尽管这在很大程度上取决于情况。尝试执行批量导入时无法读取文件?好的,中止操作,但不一定要关闭整个过程...

无可否认,你不应该这样做-- FileNotFoundException会被它派生出来的IOException所屏蔽。幸运的是,编译器完全阻止了您这样做。

票数 14
EN

Stack Overflow用户

发布于 2009-02-10 23:30:01

您显示的顺序,在FileNotFoundException之前捕获的IOException是错误的。由于FileNotFoundException扩展了IOException,因此当抛出FileNotFoundException时,将使用第一个处理程序,而第二个处理程序是死代码。

我还没有尝试过,但如果编译成功,我会感到有点惊讶。我希望像FindBugs这样的静态分析工具能捕捉到这个错误。

至于是否应该捕获FileNotFoundException,这取决于调用者。然而,我要说的是,FileNotFoundException通常可以以一种有意义的方式恢复-提示另一个文件,尝试备用位置-而不是简单地记录错误或中止进程。

票数 5
EN

Stack Overflow用户

发布于 2009-02-10 23:32:35

Java中有两种类型的异常,受控异常和非受控异常。

检查的异常必须在catch块中处理。如果不这样做,将导致编译器错误。IOException是一个检查异常的例子,必须进行处理。您在这里实际执行的操作取决于有问题的应用程序,但是必须处理异常以使编译器满意。

不需要捕获未检查的异常。所有从RuntimeException扩展的类都是未选中的。NullPointerException或ArrayIndexOutOfBoundsException就是一个很好的例子。编译器不会强制您捕获这些异常,但是当您的程序运行时,它们仍然可能发生,从而导致程序崩溃。

根据记录,可以因为尝试打开一个不存在的文件这样简单的事情而抛出IOException。这是一个好主意,处理这样的事情,并优雅地恢复(对话框告诉用户文件不存在,并使打开的文件对话框重新出现或其他什么),而不是让程序崩溃。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/534718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档