java中带参数的try(){}语法含义详解

作者:llkoio 时间:2021-10-27 05:20:16 

带参数的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

java中带参数的try(){}语法含义详解

来源:https://blog.csdn.net/llkoio/article/details/78939148

标签:java,参数,try(){},语法
0
投稿

猜你喜欢

  • springMVC实现文件上传和下载

    2023-04-17 16:39:07
  • 深入浅析C#泛型类型

    2023-01-30 06:45:54
  • Spring深入刨析声明式事务

    2022-07-04 03:57:15
  • 完美解决Android App启动页有白屏闪过的问题

    2021-11-18 02:12:31
  • 利用C#快速查出哪些QQ好友空间屏蔽了自己

    2023-10-07 22:14:28
  • .net 随机生成汉字

    2022-01-22 08:33:33
  • springmvc请求转发和重定向问题(携带参数和不携带参数)

    2022-09-17 13:53:59
  • 将替代ListView的RecyclerView 的使用详解(一)

    2023-12-05 07:57:00
  • Java中方法的重写与成员变量的隐藏

    2023-06-01 01:35:55
  • GSON实现Java对象的JSON序列化与反序列化的实例教程

    2023-11-23 12:39:02
  • C语言实现中国象棋

    2022-09-21 23:40:24
  • C#浏览器提示跨域问题解决方案

    2023-08-30 17:37:28
  • C# 获取动态key的json对象的值案例

    2023-03-03 22:02:08
  • Java如何给Word文档添加多行文字水印

    2023-11-10 07:40:58
  • 基于servlet实现统计网页访问次数

    2021-11-05 08:35:13
  • Android Camera1实现预览框显示

    2021-11-03 20:04:20
  • C#使用Socket实现本地多人聊天室

    2022-01-06 12:47:27
  • C#写入对象或集合类型数据到xml文件的方法

    2022-11-12 17:11:37
  • SpringBoot文件上传功能的实现方法

    2021-11-23 11:24:27
  • Java文件操作实例详解

    2023-11-25 10:29:40
  • asp之家 软件编程 m.aspxhome.com