我读到try-with资源中的cat
块是可选的。我尝试在try-with资源块中创建一个Connection
对象,没有后续的cat
块,只是从eclipse中获取编译器错误:“由自动关闭()
调用引发的未处理异常类型SQLException
。”
由于每一个资源,可以使用在try与资源实现AutoCloseable
,因此潜在地抛出一个异常调用关闭()
方法,我不明白如何cat
子句是可选的,因为它不允许我跳过从关闭()
捕获异常。
是否有一些特殊要求,即AutoCloseable的具体实现不直接声明其方法中抛出的任何异常?(例如,overrideAutoCloseable
'sclose()抛出异常,而
close()不抛出任何异常)?
..或者这可能只是日蚀问题?
编辑:这是仍然触发问题的最简单的代码片段:
try (Connection con = dataSource.getConnection()) {
/*...*/
}
关于这是否与使用JNDI DataSource有关的想法?
提前谢谢。
您可以检查JLS,但实际上有一个相对简单的推理,为什么这是该语言唯一正确的行为方式。
检查异常的主要规则是必须处理方法声明的任何检查异常,要么通过捕获它,要么让调用方法抛出它。
try资源总是(隐式)调用关闭方法。
因此,如果您使用的AutoClosable的特定close方法(由try中声明的类型决定)声明抛出选中的异常,例如SQLException,那么您确实需要在某处处理该选中的异常,否则可能会违反规则!
如果关闭方法没有声明它抛出检查异常,则不违反规则,并且您不需要处理隐式调用关闭方法的检查异常。如果您确实尝试捕获从未声明要抛出的检查异常,这实际上是编译失败。
您可能只是抛出异常(或在另一个try-catch块中捕获):
private static void test() throws IOException {
try(InputStream is = new FileInputStream("test.txt")) {
while(is.read() > -1) {
}
} finally {
// Will get executed, even if exception occurs
System.out.println("Finished");
}
}
如果over()
无法抛出已检查的异常,则该选项是可选的。但是,如果over()
可以,则需要以正常方式处理已检查的异常,可以使用cat
块,也可以从try-with-Resources
块所在的方法中抛出。
更多详细信息请参见JLS 14.2.3
14.20.3.2. 扩展资源试用
包含至少一个catch子句和/或finally子句的try with resources语句称为扩展try with resources语句。
扩展的try with资源语句的含义:
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 DataSource有关的想法?
是的,它是。
在您提供的示例try with resources块中,有必要捕获异常并处理,或者从块所在的方法中抛出,因为SQLException是一个选中的异常。
目前正在使用React Native,并尝试使用React Native nfc ios和React national nfc,以便我可以在ios和Android之间进行跨设备通信。我发现他们无法沟通,但我认为这是由于一个更广泛的问题(因为其他现有的应用程序也无法工作)。 如果我在iPhone7上下载NFC阅读器应用程序,在Android上下载NFC写入器应用程序,它们就无法通信。这是为什么呢?
如果你曾经使用过构建工具,你可能会对遇到的问题感到很沮丧,构建工具不是应该自动帮你完成项目的构建吗?你不得不向性能、扩展性等妥协。 比如你在构建一个项目的发布版本时,你要把一个文件拷贝到指定的位置,你在项目的元数据那里添加了版本的描述,如果版本号匹配一个特定的数字时,就把文件从A拷贝到B处。如果你依赖XML来构建,你要实现这个任务就像噩梦一样,你只能通过非标准的机制来添加一些脚本到构建中,结果就是
来源:https://github.com/atom-china/manual 这个世界上有那么多种编辑器,为什么你要花时间学习和使用 Atom 呢? 虽然 Sublime 和 TextMate 之类的编辑器已经非常好用了,但它们仅提供了很有限的拓展性。而在另一个极端,Emacs 和 Vim 提供了灵活的拓展性,但它们并不是很友好,需要使用专用的编程语言来配置和拓展。 我们觉得我们可以做得更好。我
为什么选择 NuxtJS
Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性: 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型. 作为负载均衡服务器:Ngin
虽然市场上有几十种不同的版本控制系统,一些世界上最著名的项目(例如 Linux 内核, Ruby on Rails,或是jQuery)都选择了使用 Git 作为它们的版本控制系统。为什么它们都选择 Git 呢? 节省时间 Git 运行快速。尽管我们在这里讨论的只是运行一个命令所需要的几秒钟,但是把它累积在你的日常工作中就是一个不小的飞跃了。它可以节省那些不必要的等待时间,并且去完成其它一些有意义的