为什么try-with-resources catch块是可选的?

为什么try-with-resources catch块是可选的?,第1张

为什么try-with-resources catch块是可选的?

如果

close()
不能抛出已检查的异常,则是可选的。但是,如果
close()
可以的话,则需要使用一个
catch
块或通过从该
try-with-resources
块所在的方法中抛出该异常,以一种常规方式来处理一个检查的异常。

更多细节在JLS
14.2.3中

14.20.3.2。扩展的尝试资源

带有至少一个catch子句和/或finally子句的try-with-resources语句称为扩展try-with-resources语句。

扩展try-with-resources语句的含义:

try ResourceSpecification    Block[Catches][Finally]

由以下翻译提供给嵌套在try-catch或try-finally或try-catch-finally语句内的基本try-with-
resources语句:

try {    try ResourceSpecification       Block}[Catches][Finally]

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

此外,与finally关键字的意图保持一致,到执行finally块时,所有资源都将被关闭(或尝试关闭)。

关于这是否与JNDI数据源的使用有关的思考?

是的。

在您提供的示例 try-with-resourses
块中,有必要捕获异常并对其进行处理,或者从该块所在的方法中抛出该异常,因为这

SQLException
是一个已检查的异常。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5017013.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存