Java - 尝试使用资源
最后修改:2020年7月15日
1.概述
在Java 7中引入的尝试资源支持 - 允许我们声明要在A中使用的资源尝试块保证资源在执行该块后将关闭。
宣布的资源必须实施可容易旋转界面。
2.使用尝试 - 资源
简单地放置,要自动关闭,资源必须在内部声明并初始化尝试, 如下所示:
尝试(printwriter writer = new printwriter(新文件(“test.txt”))){writer.println(“Hello World”);}
3.更换尝试-抓住 - 最后和尝试 - 资源
使用新的简单明了明显的方法尝试 - 资源功能是替换传统和冗长尝试捕获 - 最后堵塞。
让我们进行比较以下代码样本 - 首先是一个典型的尝试捕获 - 最后块,然后是新方法,使用等效的尝试 - 资源块:
扫描仪扫描仪= null;尝试{扫描仪=新扫描仪(新文件(“test.txt”));while(scanner.hasnext()){system.out.println(scanner.nextline());catch(filenotfoundexception e){e.printstacktrace();最后{if(扫描仪!= null){scanner.close();}}
以下是使用尝试资源的超简洁的解决方案:
尝试(扫描仪扫描仪=新扫描仪(新文件(“test.txt”)))){welt(scanner.hasnext()){system.out.println(scanner.nextline());catch(filenotfoundexception fnfe){fnfe.printstacktrace();}
这是您可以进一步探索的地方这扫描器班级。
4.尝试 - 资源有多个资源
可以在a中声明多个资源尝试 - 资源通过用分号分隔它们来阻止:
尝试(扫描仪扫描仪=新扫描仪(新文件(“testRead.txt”)); printwriter writer = new printwriter(新文件(“testwrite.txt”))){welt(scanner.hasnext()){writer.print(scanner.nextLine());}}
5.定制资源可容易旋转
构建一个正确处理的自定义资源尝试 - 资源块,班应该实施关闭或者可容易旋转接口,并覆盖关闭方法:
公共类MyResource实现可容易旋转的{@override public void close()抛出异常{system.out.println(“关闭myresource”);}}
6.资源结束订单
首先定义/获得的资源将结束;让我们来看看这个行为的一个例子:
资源1:
公共类AutoCloseaBleresourcesFirst实现可容易旋转{public autocloseableresourcesfirst(){system.out.println(“构造函数 - > autocloseableresources_first”);public void dosomething(){system.out.println(“something - > autocloseableresources_first”);@override public void close()抛出异常{system.out.println(“closed autocloseableresources_firsts_first”);}}
资源2:
公共类AutocloseaBleresourcessecond实现可容易旋转{public autocloseableresourcessecond(){system.out.println(“构造函数 - > autocloseableresources_second”);public void dosomething(){system.out.println(“something - > autocloseableresources_second”);@override public void close()抛出异常{system.out.println(“closed autocloseableresources_second”);}}
代码:
私有voiderofcloseResourceResource()抛出异常{try(autocloseableresourcesFirstSFRST AF = New AutoCloseablerEourcesFirst(); autocloseableresourcessecond as = new autocloseableresourcessecond()){af.dosomething();as.dosomething();}}
输出:
构造函数 - > autocloseableresources_first
构造函数 - > autocloseableresources_second
something - > autocloseableresources_first
something - > autocloseableresources_second
封闭的autocloseableresources_second.
封闭的autocloseableresources_first.
7。抓住&最后
一种尝试 - 资源堵塞仍然可以拥有抓住和最后块- 它将与传统的方式与传统的方式相同尝试堵塞。
8. Java 9:有效的决赛变量
在Java 9之前,我们只能在A内使用新的变量尝试 - 资源堵塞:
尝试(扫描仪扫描仪=新扫描仪(新文件(“testRead.txt”)); printwriter writer = new printwriter(新文件(“testwrite.txt”))){//省略}
如上所示,在声明多个资源时,这尤其赘述。作为Java 9和作为的一部分19EP 213.那我们现在可以使用最终的甚至有效地决赛A内的变量尝试 - 资源堵塞:
最终扫描仪扫描仪=新扫描仪(新文件(“testRead.txt”));printwriter writer = new printerwriter(新文件(“testwrite.txt”))尝试(扫描仪;写入器){//省略}
简单地,如果在第一个分配后没有改变,则变量是有效的,即使它没有明确标记为最终的。
如上所示,扫描器宣布变量最终的明确地,所以我们可以用它尝试 - 资源堵塞。虽然作家变量不是明确的最终的,第一个分配后它不会改变。因此,我们被允许使用作家变量也是如此。
9.结论
在本文中,我们讨论了如何使用试用资源,如何更换尝试那抓住, 和最后随着尝试 - 资源,建立自定义资源可容易旋转和资源关闭的订单。
完整源代码对于该示例可用这个github项目。