Java未报告的异常

Sej*_*nus 7 java exception-handling exception

在学习Java时,我经常偶然发现这个错误.它是这样的:

未报告的异常java.io.FileNotFound异常; 必须被抓住或宣布被抛出.

java.io.FileNotFound只是一个例子,我见过很多不同的.在这种特殊情况下,导致错误的代码是:

OutputStream out = new BufferedOutputStream(new FileOutputStream(new File("myfile.pdf")));
Run Code Online (Sandbox Code Playgroud)

将语句放入try/catch块后,错误总是消失,代码编译并成功运行.有时它对我来说足够好,但有时候不行.

首先,我正在学习的例子并不总是使用try/catch,但显然应该可以工作.

更重要的是,有时当我将整个代码放入try/catch中时,它根本无法工作.例如,在这种特殊情况下,我需要out.close(); 最后{}块; 但如果上述本身的语句是内部试{} ,最后{}犯规"看" 出来,因此不能关闭它.

我的第一个想法是导入java.io.FileNotFound; 或其他相关例外,但它没有帮助.

cle*_*tus 12

您所指的是检查异常,这意味着必须声明或处理它们.用Java处理文件的标准结构如下所示:

InputStream in = null;
try {
  in = new InputStream(...);
  // do stuff
} catch (IOException e) {
  // do whatever
} finally {
  if (in != null) {
    try {
      in.close();
    } catch (Exception e) {
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

它难看吗?当然.它是冗长的吗?当然.Java 7将使ARM块更好一些,但在此之前你会遇到上述问题.

您也可以让调用者处理异常:

public void doStuff() throws IOException {
  InputStream in = new InputStream(...);
  // do stuff
  in.close();
}
Run Code Online (Sandbox Code Playgroud)

虽然那时close()应该把它包裹起来finally.

但是上面的函数声明说这个方法可以抛出一个IOException.由于这是一个已检查的异常,因此该函数的调用者将需要catch它(或声明它以便其调用者可以处理它等等).


归档时间:

查看次数:

38341 次

最近记录:

15 年,10 月 前