为了账号安全,请及时绑定邮箱和手机立即绑定

Java未报告的异常

Java未报告的异常

德玛西亚99 2019-11-04 09:34:28
在学习Java时,我经常会偶然发现此错误。它是这样的:未报告的异常java.io.FileNotFound异常;必须被抓住或宣布被抛出。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; 或其他相关异常,但没有帮助。
查看完整描述

3 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

您所指的是检查异常,这意味着必须声明或处理它们。用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它(或声明它,以便其调用者可以处理它,依此类推)。


查看完整回答
反对 回复 2019-11-04
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

如果将获取文件放入中tryfinally即使获取失败也将运行发布部分(),这是错误的。/现在,您可以尝试一些代码来检查获取是否成功,然后再运行发行版。但是经验表明,这种方法通常编写不正确(并且显然未经测试),因此您不妨使用更简单的代码

查看完整回答
反对 回复 2019-11-04
  • 3 回答
  • 0 关注
  • 415 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信