使用try-with-resource遇到的问题

摘要:
JDK1.7添加了try with source语法。1 try//可以指定多个资源。所以我去找了官方文件。官方文档的try with资源包含以下描述:https://docs.oracle.com/javase/specs/jls/se12/html/jls-14.html#jls-14.20.3对于每个可变的声明资源规范,其完全符合错误出现一次以上的修改。可变的声明源规范是简单声明的最终版本,而不是明确声明的最终版。如果final多次作为声明资源中当前变量的修饰符出现,则会发生编译时错误。显然,trywithresource中声明的变量将被隐式添加到final关键字中,因此不能再分配它们。因此,我们不能使用try with resource

JDK1.7增加了try-with-source语法。在try中声明一个或者多个资源,在try块代码执行完成后自动关闭流,不用再写close()进行手动关闭。

1 try(Resource res = xxx)//可指定多个资源
2 {
3      work with res
4 } 
5 // 实现了AutoCloseable接口的类的对象就是资源

于是我想在代码中改成try-with-resource的写法,但是修改后IDEA一直会报编译时错误:

使用try-with-resource遇到的问题第1张

Cannot assign a value to final variable 'connection'

无法给final类型的变量'connection'赋值

后面的statement, resultSet有同样的错误。

于是我去找了一下官方文档,官方文档的try-with-resource中有这样一段描述:

https://docs.oracle.com/javase/specs/jls/se12/html/jls-14.html#jls-14.20.3

It is a compile-time error if final appears more than once as a modifier for each variable declared in a resource specification.

A variable declared in a resource specification is implicitly declared final if it is not explicitly declared final (§4.12.4).

如果final作为资源中声明当前变量的修饰符出现多次,则会出现编译时错误。

在资源中声明的变量如果没有显式声明为final,则将被隐式声明为final。

显然,try-with-resource中声明的变量会被隐式地加上final关键字,所以无法再进行赋值。

因此,对于这种情况我们无法使用try-with-resource.

免责声明:文章转载自《使用try-with-resource遇到的问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇sqlserver2012数据库软件包及安装方法Django之DRF框架下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

变量的命名规则及命名规范

变量的命名规则如下: 1、组成:52个应为字母(A-Z、a~z)、10个数字(0~9)、下划线(_)、除此之外不能含有其他的字符。 2、开头:只能以字母或下划线开头。 3、不能使用的:不能是C#中的关键字 变量命名规范如下: 1、变量的名称要有意义,尽量用对应的英文命名,具有见名知意的作用。比如一个变量代表姓名,不能使用aa、bb等,要使用name。 2、...

HBase性能优化方法总结

4.1 HBase性能优化方法总结(一):表的设计 4.1.1 Pre-Creating Regions 默认情况下,在创建HBase表的时候会自动创建一个region分区,当导入数据的时候,所有的HBase客户端都向这一个region写数据,直到这个region足够大了才进行切分。一种可以加快批量写入速度的方法是通过预先创建一些空的regions,这样...

[PDFBox]后台操作pdf的工具类

PDFBox是Apache下的一个操作pdf的类库。其也提供了一个命令行的工具,也提供了java调用的第三方类库。 下载地址:https://pdfbox.apache.org/ 下面的实验基于JDK8+pdfbox-2.0.13.jar+pdfbox-app-2.0.13.jar(命令行工具库) 1.命令行使用 文档参考:https://pdfbox.a...

SqlServer中使用Select语句给变量赋值的时候需要注意的一个问题

我们知道在SqlServer中可以用Select语句给变量赋值,比如如下语句就为int类型的变量@id赋值 1 declare @id int=-1; 2 3 select @id=id from 4 ( 5 select 1 as id 6 union all 7 select 2 as id 8 union all...

AI学习---基于TensorFlow的案例[实现线性回归的训练]

线性回归原理复习         1)构建模型               |_> y = w1x1 + w2x2 + …… + wnxn + b        2)构造损失函数               |_> 均方误差        3)优化损失               |_> 梯度下降 实现线性回归的训练         准...

VB.net基础知识

3.1 常量 3.1.1 什么是常量          在编程中,常常可以遇到变量和常量。顾名思义,变量就是值可以改变的量,常量是其值不可改变的量。          不可以改变的量有什么用呢?事实上,在实际编程中,常量用得很少。甚至可以用变量代替常量,当然这样做的代价是降低了程序的性能。          事实上,常量有很多用处。例如圆周率,如果每次需要...