发布
社区首页 >问答首页 >Java例外原理

Java例外原理
EN

Stack Overflow用户
提问于 2012-01-05 18:41:04
回答 6查看 511关注 0票数 4

这一次是个相当理论性的问题。所以我在Eclipse中使用这个函数:

代码语言:javascript
代码运行次数:0
复制
CsvReader csv = new CsvReader("src/maindroite.csv");

因为“未处理的异常类型FileNotFoundException”而无法运行。好的,我知道我必须为文件不存在的情况添加一些东西,在这种情况下,我通常会添加几行来处理异常并丢弃它。但是我的问题是:为什么我需要捕获异常,即使文件确实存在?实际上,为什么我甚至对某些函数有这个例外的东西,而没有其他的呢?

例如,假设我试图运行:

代码语言:javascript
代码运行次数:0
复制
ImageIcon icon1 = new ImageIcon("src/square.jpg");
ImageIcon icon2 = new ImageIcon("src/circle.jpg");

其中存在"square.jpg“,但不存在"circle.jpg”。该程序将创建icon1,但不会创建icon2,因为它不能。但是我不需要为图像不存在的情况添加ExceptionHandler。这两种功能有什么区别?

总结一下:

  • 当文件ExceptionHandler存在时,为什么要添加
  • 为什么我必须为某些函数而不是其他函数添加一个ExceptionHandler?

谢谢!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-01-05 18:47:17

当文件确实存在时,为什么我必须添加一个ExceptionHandler?

基本上必须添加它,因为您不能编写这样的条件代码,简而言之,编译器不可能在运行时之前知道该文件是否存在,因此编译器强制yo放置一个/catch块,因为FileNotFoundException是一个 已选中 异常。

为什么我必须为某些函数而不是其他函数添加一个ExceptionHandler?

**NOT*只需将try/catch块添加到抛出检查异常的任何内容,即**NOT*RuntimeExceptionError类继承的任何内容。ErrorRuntimeException的子类不检查异常,您可以将try/catch放到编译器不关心的位置。由于ImageIcon的构造函数不抛出任何类型的异常,如果图像不存在,则只返回null,因此不需要执行try/catch块。

票数 4
EN

Stack Overflow用户

发布于 2012-01-05 18:43:58

即使该文件现在存在,但在您的系统中,以后也可能不存在。或者,您可以将此代码提供给没有src/square.jpg的人。或者可能会出现硬件故障,硬盘上的某些东西被损坏,不小心删除了src/src.src。也许用户甚至可以删除这些文件。

Java中的异常处理迫使您考虑在最坏的情况下,如果发生了一些非常糟糕的事情会发生什么(比如src/square.jpg丢失了)。你会撞车吗?继续下去就像什么都没发生一样好吗?您将在catch子句中决定如何处理这些故障模式。

有些函数不要求您处理异常,因为在可以合理地期望您处理的函数中没有任何可能出错的地方。

票数 2
EN

Stack Overflow用户

发布于 2012-01-05 18:47:58

1)当文件存在时,为什么要添加ExceptionHandler?

因为Java编译器无法知道该文件在某些任意运行时是否实际存在。(假设在编译后但在运行程序之前删除了该文件?)基本上,您的代码必须始终具有处理条件所需的逻辑,这些条件是不希望发生的,但无论如何也可能发生。

2)为什么我必须为某些函数而不是其他函数添加一个ExceptionHandler?

可能有各种原因,但这是你可能看到的原因。每个方法都会抛出异常,但如果将异常向上传播,则每个try/catch块或每个方法都会被捕获。在您的示例中,您可以将对ImageIcon构造函数的每个调用包装在自己的try/catch块中,或者将两者结合在一起,这取决于您想要做什么:

代码语言:javascript
代码运行次数:0
复制
try {
  icon1 = new ImageIcon("f1.jpg");
} catch (Exception e) { /* Handle the case for missing "f1.jpg". */ }
try {
  icon2 = new ImageIcon("f2.jpg");
} catch (Exception e) { /* Handle the case for missing "f2.jpg". */ }

与之相比:

代码语言:javascript
代码运行次数:0
复制
try {
  icon1 = new ImageIcon("f1.jpg");
  icon2 = new ImageIcon("f2.jpg");
} catch (Exception e) { /* Handle the case for missing "f1" or "f2". */ }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8747921

复制
相关文章

相似问题

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