浅谈java7增强的try语句关闭资源

 更新时间:2017年06月04日 07:21:37   投稿:jingxian  
下面小编就为大家带来一篇浅谈java7增强的try语句关闭资源。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

java7增强的try语句关闭资源

传统的关闭资源方式

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

class Student implements Serializable {
  private String name;

  public Student(String name) {
    this.name = name;
  }
}

public class test2 {
  public static void main(String[] args) throws Exception {
    Student s = new Student("WJY");
    Student s2 = null;
    ObjectOutputStream oos = null;
    ObjectInputStream ois = null;
    try {
      //创建对象输出流
      oos = new ObjectOutputStream(new FileOutputStream("b.bin"));
      //创建对象输入流
      ois = new ObjectInputStream(new FileInputStream("b.bin"));
      //序列化java对象
      oos.writeObject(s);
      oos.flush();
      //反序列化java对象
      s2 = (Student) ois.readObject();
    } finally { //使用finally块回收资源
      if (oos != null) {
        try {
          oos.close();
        } catch (Exception ex) {
          ex.printStackTrace();
        }
      }
      if (ois != null) {
        try {
          ois.close();
        } catch (Exception ex) {
          ex.printStackTrace();
        }
      }
    }
  }
}

使用finally块来关闭物理资源,保证关闭操作总是会被执行。

关闭每个资源之前首先保证引用该资源的引用变量不为null。

为每一个物理资源使用单独的try...catch块来关闭资源,保证关闭资源时引发的异常不会影响其他资源的关闭。

以上方式导致finally块代码十分臃肿,程序的可读性降低。

java7增强的try语句关闭资源

为了解决以上传统方式的问题, Java7新增了自动关闭资源的try语句。它允许在try关键字后紧跟一对圆括号,里面可以声明、初始化一个或多个资源,此处的资源指的是那些必须在程序结束时显示关闭的资源(数据库连接、网络连接等),try语句会在该语句结束时自动关闭这些资源。

public class test2 {
  public static void main(String[] args) throws Exception {
    Student s = new Student("WJY");
    Student s2 = null;
    try (//创建对象输出流
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("b.bin"));
        //创建对象输入流
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("b.bin"));
    )
  {
      //序列化java对象
      oos.writeObject(s);
      oos.flush();
      //反序列化java对象
      s2 = (Student) ois.readObject();
    }

  }
}

自动关闭资源的try语句相当于包含了隐式的finally块(用于关闭资源),因此这个try语句可以既没有catch块,也没有finally块。

注意:

被自动关闭的资源必须实现Closeable或AutoCloseable接口。(Closeable是AutoCloseable的子接口,Closeeable接口里的close()方法声明抛出了IOException,;AutoCloseable接口里的close()方法声明抛出了Exception)

被关闭的资源必须放在try语句后的圆括号中声明、初始化。如果程序有需要自动关闭资源的try语句后可以带多个catch块和一个finally块。

Java7几乎把所有的“资源类”(包括文件IO的各种类,JDBC编程的Connection、Statement等接口……)进行了改写,改写后的资源类都实现了AutoCloseable或Closeable接口

以上这篇浅谈java7增强的try语句关闭资源就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring常用注解汇总

    Spring常用注解汇总

    这篇文章主要介绍了Spring常用注解汇总,需要的朋友可以参考下
    2014-08-08
  • java多线程实现交通灯管理系统

    java多线程实现交通灯管理系统

    这篇文章主要为大家详细介绍了java多线程实现交通灯管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Set接口深入剖析之HashSet、LinkedHashSet和TreeSet

    Set接口深入剖析之HashSet、LinkedHashSet和TreeSet

    这篇文章主要介绍了Set接口深入剖析之HashSet、LinkedHashSet和TreeSet,LinkedHashSet是HashSet的子类,实现了Set接口,LinkedHashSet底层是一个LinkedHashMap,底层维护了一个数组+双向链表,需要的朋友可以参考下
    2023-09-09
  • Java使用jmeter进行压力测试

    Java使用jmeter进行压力测试

    本篇文章简单讲一下使用jmeter进行压力测试。其压测思想就是 通过创建指定数量的线程,同时请求指定接口,来模拟指定数量用户同时进行某个操作的场景,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Java Poi-tl根据模板导出Word文件

    Java Poi-tl根据模板导出Word文件

    这篇文章主要为大家详细介绍了Java如何使用Poi-tl根据模板实现导出Word文件,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-03-03
  • Java使用Hutool+自定义注解实现数据脱敏

    Java使用Hutool+自定义注解实现数据脱敏

    我们在使用手机银行的时候经常能看到APP上会将银行卡的卡号中间部分给隐藏掉使用 ***** 来代替,在某些网站上查看一些业务密码时(例如签到密码等)也会使用 ***** 来隐藏掉真正的密码,那么这种方式是如何实现的呢,本文将给大家介绍使用Hutool+自定义注解实现数据脱敏
    2023-09-09
  • Java复制(拷贝)数组的4种方法:arraycopy()方法、clone() 方法、copyOf()和copyOfRan

    Java复制(拷贝)数组的4种方法:arraycopy()方法、clone() 方法、copyOf()和copyOfRa

    这篇文章主要介绍了Java复制(拷贝)数组的4种方法:arraycopy()方法、clone() 方法、copyOf()和copyOfRan,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • SpringBoot集成MaxCompute的示例代码

    SpringBoot集成MaxCompute的示例代码

    这篇文章主要介绍了SpringBoot集成MaxCompute的实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • 基于java实现斗地主代码实例解析

    基于java实现斗地主代码实例解析

    这篇文章主要介绍了基于java实现斗地主代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • 你必须得会的SpringBoot全局统一处理异常详解

    你必须得会的SpringBoot全局统一处理异常详解

    程序在运行的过程中,不可避免会产生各种各样的错误,这个时候就需要进行异常处理,本文主要为大家介绍了SpringBoot实现全局统一处理异常的方法,需要的可以参考一下
    2023-06-06

最新评论