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

尝试使用资源:是否必须抛出或捕获close()方法的异常?

吴举
2023-03-14
问题内容

如果这是错误的,请纠正我:在Java 7的try-with-
resources语句中,资源close()方法抛出的任何异常都必须声明为我的方法抛出,或者我必须将整个try包裹在另一个try捕获抛出的异常的方法中close()

如果是这样,我想知道我是否会充分利用它。我当然不希望throw抛出异常close(),调用者将不知道该如何处理。至少对我来说,try一个try只用来处理的包裹close()看起来并不优雅。

编辑: 我想我不小心问了两个问题,其中一个是重复的。

问题1.我是否必须声明我的方法从该方法引发异常,close()还是将try-with-
resources包装在另一个try中?(未在建议的重复项中回答。)

问题2.是否有一种方法可以静默关闭资源?(显然是重复的,所以我把那个句子从问题中删除了。希望这可以使问题令人满意地唯一。)


问题答案:

引用Java语言规范($
14.20.3.2)

14.20.3.2扩展的尝试资源

试,与资源 语句至少一个catch子句和/或finally子句称为扩展的尝试,与资源的语句。扩展try-with-resources语句的含义:

尝试 ResourceSpecification

捕获 opt
最后 opt

通过以下翻译给出嵌套在 try-catchtry-finallytry-catch-finally 语句内的基本 try-
with-resources

语句(第14.20.3.1节)
__

尝试{
试试 ResourceSpecification
Block
}
捕获 opt
最后 opt

转换的结果是将ResourceSpecification放在try语句内。这允许扩展try-with-
resources语句的catch子句捕获由于自动初始化或关闭任何资源而导致的异常。

因此,基本上,包装器已经实现



 类似资料:
  • 问题内容: 我一直在看代码,并且看到了尝试资源的机会。我以前使用过标准的try-catch语句,看起来它们在做同样的事情。所以我的问题是“ 尝试使用资源”与“尝试捕获 ”之间的区别是什么,哪个更好。 这是尝试使用资源: 问题答案: 尝试使用资源的重点是确保可靠地关闭资源。 当你不使用try-with-resources时,存在一个潜在的陷阱,称为异常屏蔽。当try块中的代码引发异常,而finall

  • 前几天,我在我们的一个项目中看到一些代码,它们使用try-catch并重新抛出捕获的异常,如下所示: 除了catch块中的异常之外,没有做任何其他操作,所以我甚至不确定它为什么会被抛出。我看不出再次抛出同一个异常并对该异常不做任何处理有什么好处。 如果重新抛出catch块中捕获的异常,C#如何处理?它是否陷入了无限抛接球循环?还是说它最终会放弃试一试?

  • 问题内容: 我尝试编译以下内容,但在m16h(x)周围得到以下内容: 不知道为什么。我已经尝试过各种方法,但是看来我做得对。 问题答案: 方法的签名表明很容易引发Exception。 这意味着异常之一: 必须由呼叫者处理 } catch (Exception e) { e.printStackTrace(); } 必须由呼叫者重新抛出

  • 不管错误情况如何,使用资源尝试是否总是关闭资源?我的意思是考虑以下代码: 会一直关闭吗?我读过Oracle文档,其中说: 无论try语句是正常完成还是突然完成,它都将关闭 因此无论程序正常运行还是抛出异常,它都将起作用。但是,类似或崩溃的情况怎么办?我知道这些条件对块不起作用。那么,使用资源尝试失败的条件是否存在? 这只是我请求的好奇心,谁能说明这一点吗?

  • 我有一个方法被定义为: 编译器抱怨说,“未报告的异常政策异常;必须被捕获或声明为被抛出。我不知道为什么它建议我可以抛出,但“抛出”就在方法签名中。 被定义为: 当我尝试在try…catch中封装调用时,错误会保留,并会引发另一个错误,该错误表示try主体中从未抛出异常。我该如何补救?Am使用javase7和netneans 8

  • 问题内容: 有没有人见过在任何可关闭对象上调用close方法时引发异常的情况? 问题答案: 一会就被抛出,如果最终失败。可能的原因包括: 文件系统已满,或用户超出配额, 硬盘错误 文件系统被强行卸载, 由于网络或其他问题,远程文件系统不可用, (可能是)通过或类似方式写入文件的字符编码错误, 如果“文件”是设备文件,则设备错误, 如果可关闭设备是网络流,则失去连接, 如果封闭容器是通向外部过程的管