当前位置: 首页 > 面试题库 >

Java未报告的异常

柯波峻
2023-03-14
问题内容

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

Unreported exception java.io.FileNotFound exception; must be caught or declared to be thrown.

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

OutputStream out = new BufferedOutputStream(new FileOutputStream(new File("myfile.pdf")));

一旦将语句放入try / catch块中,错误总是消失并且代码编译并成功运行。有时对我来说已经足够了,但有时却不行。

首先,我从中学习的示例并不总是使用try / catch,但是显然应该可以使用。

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

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


问题答案:

你所指的是检查异常,这意味着必须声明或处理它们。用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) {
    }
  }
}

丑吗?当然。冗长吗?当然。Java 7将通过ARM块使其变得更好一些,但是直到那时,你仍然只能使用上面的代码。

你还可以让调用方处理异常:

public void doStuff() throws IOException {
  InputStream in = new InputStream(...);
  // do stuff
  in.close();
}

尽管即使这样,也close()应该将其包装成一个finally块。

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



 类似资料:
  • 问题内容: 我收到了一个未报告的异常;必须在下面的fill方法中被捕获或声明为抛出错误。从我读过的类似文章中,我假设错误是由read方法引发Exception引发的,但我无法修复。 填充定义为: 问题答案: 您的call ,它被声明为throw ,但是您既没有捕获witin异常,也没有声明它可能被抛出。 最简单的解决方法是将的签名更改为: 我也强烈建议 不要 关闭中的读者。通常,获取资源的相同代码

  • 然而,试图使用jsp与bean交互时,在运行它时会出现一些错误。 下面是我在浏览器中看到的错误 生成的servlet错误:[javac]c:\sun\appservernew\domains\domain1\Generated\jsp\j2ee-apps\converterapp\war-ic_war\org\apache\jsp\index_jsp.java:24:未报告的异常javax.ejb

  • 问题内容: 我想打开一个文件并对其进行扫描以打印其令牌,但出现错误:未报告的异常java.io.FileNotFoundException; 必须被捕获或声明为抛出Scanner stdin = new Scanner(file1);该文件与正确的名称位于同一文件夹中。 问题答案: 您正在使用的构造函数将引发FileNotFoundException,您必须在编译时捕获该异常。 上面的表示法(在括

  • 我试图找出为什么在<代码>中会发生特定行为。orElseThrow在Java流中。此代码块 导致此错误:

  • 问题内容: 请问为什么第13行中的错误是未报告的异常,必须在声明声明为pr的情况下将其捕获 问题答案: 您需要向引发异常的方法中添加一个,如上所述,以及调用该方法的所有方法

  • 请问为什么第13行的错误是未报告的异常,必须捕获pr声明要抛出