java中带参数的try(){}语法含义详解
作者:llkoio 发布时间:2021-10-27 05:20:16
标签:java,参数,try(){},语法
带参数的try(){}语法含义
带资源的try语句(try-with-resource)
最简形式为
try(Resource res = xxx)//可指定多个资源
{
work with res
}
try块退出时,会自动调用res.close()方法,关闭资源。
PS:在coreJava第9版的第一卷的486页有解释。
挺好用的语法,不用写一大堆finally来关闭资源,所有实现Closeable的类声明都可以写在里面,最常见于流操作,socket操作,新版的httpclient也可以;
需要注意的是
try()的括号中可以写多行声明,每个声明的变量类型都必须是Closeable的子类,用分号隔开。楼上说不能关两个流的落伍了
补充一下:在没有这个语法之前,流操作一般是这样写的:
InputStream is = null;
OutputStream os = null;
try {
//...
} catch (IOException e) {
//...
}finally{
try {
if(os!=null){
os.close();
}
if(is!=null){
is.close();
}
} catch (IOException e2) {
//...
}
}
而现在你可以这样写:
try(
InputStream is = new FileInputStream("...");
OutputStream os = new FileOutputStream("...");
){
//...
}catch (IOException e) {
//...
}
生活一下就美好了
对try(){}的简单理解
以前使用try catch-finally都是捕获异常,然后流关闭等等,代码总是这样的:
好比往FileOutputStream写东西
@Test
public void test2() throws IOException {
File file = new File("E://test");
if (!file.exists()) {
file.createNewFile();
}
FileOutputStream fileOutputStream = new FileOutputStream(file);
try {
System.out.println("do something...");
fileOutputStream.write("aaa".getBytes());
fileOutputStream.flush();
} catch (Exception e) {
System.out.println("do ...");
} finally {
fileOutputStream.close();
}
}
这样写很难受,可以进行优化
将FileOutputStream fileOutputStream = new FileOutputStream(file)放到try()里面,也可以放多个
@Test
public void test2() throws IOException {
File file = new File("E://test");
if (!file.exists()) {
file.createNewFile();
}
try( FileOutputStream fileOutputStream = new FileOutputStream(file);) {
System.out.println("do something...");
fileOutputStream.write("aaa".getBytes());
fileOutputStream.flush();
} catch (Exception e) {
System.out.println("do ...");
}
}
try()里每个声明的变量类型都必须是Closeable的子类,就一个close方法
相当于系统自动将关闭操作放到了finally里面而不需要我们自己写了,很nice
来源:https://blog.csdn.net/llkoio/article/details/78939148
0
投稿
猜你喜欢
- c#调用surfer软件,添加应用的方法:1.在项目文件上右键->添加引用2.选择COM标签页3.找到Surfer 9 type li
- 前言在RocketMQ中为,我们创建消息生产者时,只需要设置NameServer地址,消息就能正确地发送到对应的Broker中,那么Rock
- 最近公司需要做一个告警页面的功能,需要分页,查了很多资料发现PageHelper比较合适故写一篇从零开始的PageHelper使用的教程,也
- Spring Boot产生环形注入***************************APPLICATION FAILED TO STAR
- 前言JDK 1.5 之前 synchronized 的性能是比较低的,但在 JDK 1.5 中,官方推出一个重量级功能 Lock,一举改变了
- 在前面一篇Java Comparable和Comparator对比详解中,对于java中的排序方法进行比较和具体剖析,主要是针对 Compa
- 一、LinkedHashMap的类继承关系二、源码分析1.自己对LinkedHashMap的理解从继承关系上,我们看到LinkedHashM
- 1:@Qualifier@Qualifier 注释指定注入 Bean 的名称,这样歧义就消除了。所以@Auto
- 一、背景知识:树(Tree)在之前的笔记中,我们介绍的链表、栈、队列、数组和字符串都是以线性结构来组织数据的。本篇笔记要介绍的树采用的是树状
- 首先使用一个用户提交界面作为举例(文本框,密码框,选择,下拉表单等),效果如下<!DOCTYPE html PUBLIC "
- 最近在做项目的过程中 需要用JWT做登录和鉴权 查了很多资料 都不甚详细有的是需要在application.yml里进行jwt的配置 但我在
- 研发背景公司安全部目前针对内部系统的网络访问日志的安全审计,大部分都是T+1时效,每日当天,启动Python编写的定时任务,完成昨日的日志审
- 在javaweb中写了一个图片的链接,可以打开预览,另外提供一个下载功能。以下是预览代码,没什么好说的;href若连接的是一个压缩包文件之类
- 参考dubbo和shenyu网关实现自定义的SPISPI标注注解标注提供SPI能力接口的注解@Documented@Retention(Re
- 年纪大了,以前做过的东西过阵子还是会忘,今天使用jenkins持续集成工具时用到了eclipse上传新maven工程至svn,上传完毕后改了
- spring容器是负责实例化、配置、组装组件的容器。容器的配置有很多,常用的是xml、Java注解和Java代码。在spring中Ioc容器
- 前言:java.util.Set接口和 java.util.List接口一样,同样继承自 Collection接口,它与
- Java8的groupingBy实现集合的分组,类似Mysql的group by分组功能,注意得到的是一个map对集合按照单个属性分组、分组
- 背景在Java中一个回调的操作是一个在一些操作完成之后被传递到另一个函数中并且被执行的函数。一个回调函数既可以被同步或者异步执行。在一个同步
- 正则表达式是一种描述词素的重要表示方法。虽然正则表达式并不能表达出所有可能的模式(例如“由等数量的 a 和 b 组成的字符串”),但是它可以