如果这是错误的,请纠正我:在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-catch 或 try-finally 或 try-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
嘿StackOverflow社区, 关于抛出异常。一般什么时候抛出和异常,什么时候抓取? 假设我遇到了这样的情况,我不得不退出,因为发生了一些问题,我无法从它中恢复过来。我是投还是接? 我现在就这么做: 这样做对吗?如果我只是抛出异常会更合适吗?对不起,我是例外的新手:)