欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談java7增強(qiáng)的try語(yǔ)句關(guān)閉資源

 更新時(shí)間:2017年06月04日 07:21:37   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇淺談java7增強(qiáng)的try語(yǔ)句關(guān)閉資源。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

java7增強(qiáng)的try語(yǔ)句關(guān)閉資源

傳統(tǒng)的關(guān)閉資源方式

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 {
      //創(chuàng)建對(duì)象輸出流
      oos = new ObjectOutputStream(new FileOutputStream("b.bin"));
      //創(chuàng)建對(duì)象輸入流
      ois = new ObjectInputStream(new FileInputStream("b.bin"));
      //序列化java對(duì)象
      oos.writeObject(s);
      oos.flush();
      //反序列化java對(duì)象
      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塊來(lái)關(guān)閉物理資源,保證關(guān)閉操作總是會(huì)被執(zhí)行。

關(guān)閉每個(gè)資源之前首先保證引用該資源的引用變量不為null。

為每一個(gè)物理資源使用單獨(dú)的try...catch塊來(lái)關(guān)閉資源,保證關(guān)閉資源時(shí)引發(fā)的異常不會(huì)影響其他資源的關(guān)閉。

以上方式導(dǎo)致finally塊代碼十分臃腫,程序的可讀性降低。

java7增強(qiáng)的try語(yǔ)句關(guān)閉資源

為了解決以上傳統(tǒng)方式的問(wèn)題, Java7新增了自動(dòng)關(guān)閉資源的try語(yǔ)句。它允許在try關(guān)鍵字后緊跟一對(duì)圓括號(hào),里面可以聲明、初始化一個(gè)或多個(gè)資源,此處的資源指的是那些必須在程序結(jié)束時(shí)顯示關(guān)閉的資源(數(shù)據(jù)庫(kù)連接、網(wǎng)絡(luò)連接等),try語(yǔ)句會(huì)在該語(yǔ)句結(jié)束時(shí)自動(dòng)關(guān)閉這些資源。

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

  }
}

自動(dòng)關(guān)閉資源的try語(yǔ)句相當(dāng)于包含了隱式的finally塊(用于關(guān)閉資源),因此這個(gè)try語(yǔ)句可以既沒(méi)有catch塊,也沒(méi)有finally塊。

注意:

被自動(dòng)關(guān)閉的資源必須實(shí)現(xiàn)Closeable或AutoCloseable接口。(Closeable是AutoCloseable的子接口,Closeeable接口里的close()方法聲明拋出了IOException,;AutoCloseable接口里的close()方法聲明拋出了Exception)

被關(guān)閉的資源必須放在try語(yǔ)句后的圓括號(hào)中聲明、初始化。如果程序有需要自動(dòng)關(guān)閉資源的try語(yǔ)句后可以帶多個(gè)catch塊和一個(gè)finally塊。

Java7幾乎把所有的“資源類”(包括文件IO的各種類,JDBC編程的Connection、Statement等接口……)進(jìn)行了改寫,改寫后的資源類都實(shí)現(xiàn)了AutoCloseable或Closeable接口

以上這篇淺談java7增強(qiáng)的try語(yǔ)句關(guān)閉資源就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • spring狀態(tài)機(jī)模式使用小結(jié)

    spring狀態(tài)機(jī)模式使用小結(jié)

    說(shuō)起Spring狀態(tài)機(jī),大家很容易聯(lián)想到這個(gè)狀態(tài)機(jī)和設(shè)計(jì)模式中狀態(tài)模式的區(qū)別是啥呢?沒(méi)錯(cuò),Spring狀態(tài)機(jī)就是狀態(tài)模式的一種實(shí)現(xiàn),在介紹Spring狀態(tài)機(jī)之前,讓我們來(lái)看看設(shè)計(jì)模式中的狀態(tài)模式,需要的朋友可以參考下
    2024-04-04
  • java:程序包org.springframework.boot不存在的完美解決方法

    java:程序包org.springframework.boot不存在的完美解決方法

    最近項(xiàng)目中運(yùn)行的時(shí)候提示了"java: 程序包org.springframework.boot不存在",下面這篇文章主要給大家介紹了關(guān)于java:程序包org.springframework.boot不存在的完美解決方法,需要的朋友可以參考下
    2023-05-05
  • 基于Springboot+Junit+Mockito做單元測(cè)試的示例

    基于Springboot+Junit+Mockito做單元測(cè)試的示例

    本篇文章主要介紹了基于Springboot+Junit+Mockito做單元測(cè)試的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • 圖解JVM內(nèi)存模型

    圖解JVM內(nèi)存模型

    這篇文章主要介紹了JVM內(nèi)存模型的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java虛擬機(jī),感興趣的朋友可以了解詳細(xì)
    2020-10-10
  • SpringBoot如何解析參數(shù)的深入理解

    SpringBoot如何解析參數(shù)的深入理解

    這篇文章主要給大家介紹了關(guān)于SpringBoot是如何解析參數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用SpringBoot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • SpringBoot項(xiàng)目啟動(dòng)數(shù)據(jù)加載內(nèi)存的三種方法

    SpringBoot項(xiàng)目啟動(dòng)數(shù)據(jù)加載內(nèi)存的三種方法

    一般來(lái)說(shuō),SpringBoot工程環(huán)境配置放在properties文件中,啟動(dòng)的時(shí)候?qū)⒐こ讨械膒roperties/yaml文件的配置項(xiàng)加載到內(nèi)存中,本文給大家介紹了SpringBoot項(xiàng)目啟動(dòng)數(shù)據(jù)加載內(nèi)存中的三種方法,需要的朋友可以參考下
    2024-04-04
  • Java數(shù)組傳遞及可變參數(shù)操作實(shí)例詳解

    Java數(shù)組傳遞及可變參數(shù)操作實(shí)例詳解

    這篇文章主要介紹了Java數(shù)組傳遞及可變參數(shù)操作,結(jié)合實(shí)例形式詳細(xì)分析了java數(shù)組參數(shù)傳遞與可變參數(shù)相關(guān)使用技巧,需要的朋友可以參考下
    2019-09-09
  • Java規(guī)則引擎Easy Rules的使用介紹

    Java規(guī)則引擎Easy Rules的使用介紹

    這篇文章主要介紹了Java規(guī)則引擎Easy Rules的使用介紹,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Java8中List轉(zhuǎn)換String字符串幾種方式

    Java8中List轉(zhuǎn)換String字符串幾種方式

    這篇文章主要給大家介紹了關(guān)于Java8中List轉(zhuǎn)換String字符串的幾種方式,在實(shí)際開(kāi)發(fā)中經(jīng)常遇到List轉(zhuǎn)為String字符串的情況,文中給出了幾種方法的示例代碼,需要的朋友可以參考下
    2023-07-07
  • Java實(shí)現(xiàn)加鹽加密算法的示例詳解

    Java實(shí)現(xiàn)加鹽加密算法的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用Java語(yǔ)言實(shí)現(xiàn)加鹽加密算法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2023-06-06

最新評(píng)論