本篇内容主要讲解“java中怎么使用try-with-resource机制关闭连接”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java中怎么使用try-with-resource机制关闭连接”吧!
即自动GC,给开发者带来了极大的便利。但是JVM对外部资源的引用却无法自动回收,例如数据库连接,网络连接以及输入输出IO流等,这些连接就需要我们手动去关闭,不然会导致外部资源泄露,连接池溢出以及文件被异常占用等。
try{}catch(){}finally{}机制的finally代码块中,因为finally代码块中语句是肯定会被执行的,即保证了外部资源最后一定会被释放。同时考虑到finally代码块中也有可能出现异常,finally代码块中也有一个try{}catch(){},这种写法是经典的传统释放外部资源方法,显然是非常繁琐的。
首先被自动关闭的资源需要实现Closeable或者AutoCloseable接口,因为只有实现了这两个接口才可以自动调用close()方法去自动关闭资源。写法为try(){}catch(){},将要关闭的外部资源在try()中创建,catch()捕获处理异常。
其实try-with-resource机制是一种语法糖,其底层实现原理仍然是try{}catch(){}finally{}写法,不过在catch(){}代码块中有一个addSuppressed()方法,即异常抑制方法。
如果业务处理和关闭连接都出现了异常,业务处理的异常会抑制关闭连接的异常,只抛出处理中的异常,仍然可以通过getSuppressed()方法获得关闭连接的异常。
和传统的try{}catch(){}finally{}机制相比,try-with-resource处理机制有了这个异常抑制方法就是帮助我们简化了关闭连接时出现异常的处理。
大概的用法就是在try中声明一个或者多个的流,会在try块代码执行完成后自动关闭流,不用再写finally进行手都关闭。
try (InputStream is1 = ...; InputStream is2 = ...;) { //do something } catch{ }
于是我就在项目中想改成这种写法,但是在改的过程中遇到了一些问题。我的代码中需要对声明过后的流再赋值,但是用这样的写法一直会报错
此时会编译出错:
The resource is1 of a try-with-resources statement cannot be assigned;
报错的原因是:
try-with-source中声明的变量无法被更改。但是我很奇怪这是为什么,上网搜了没有搜到,于是去找了一下官方文档。官方文档中有一段这样的描述:
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 (§4.12.4) if it is not explicitly declared final.
意思就是,try-with-resource中声明的变量会隐式的加上final 关键字,所以无法再进行赋值。但是至于为什么这么设计,我暂时没找到答案。
到此,相信大家对“java中怎么使用try-with-resource机制关闭连接”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。