java 7強化のtry文については、リソースをクローズします。

3192 ワード

java 7強化の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ブロックコードが非常に肥大し、プログラムの可読性が低下します。
java 7強化のtry文は資源をクローズします。
以上の従来方式の問題を解決するために、Java 7は自動的にリソースを閉じるtry文を追加しました。これは、tryキーの後に、ペアの括弧に続くことができます。ここでは、1つまたは複数のリソースを宣言、初期化できます。ここでのリソースとは、プログラムが終了したときに閉じられているリソース(データベース接続、ネットワーク接続など)を表示しなければならないということです。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ブロックもないことができる。
注意:
自動的にクローズされたリソースは、Close bleまたはAutoCloseableインターフェースを実現する必要があります。ClooseableはAutoClose bleのサブインターフェースであり、Close ableインターフェースの中のclose()方法声明はIOExceptionを投げました。AutoCloseableインターフェースのclose()メソッド宣言はExceptionを投げました。
閉じられたリソースはtry文の後の括弧に入れて宣言し、初期化しなければなりません。プログラムがリソースを自動的に閉じるために必要なtry文があれば、複数のcatchブロックと一つのfinallyブロックを持つことができます。
Java 7はほとんどすべての「資源類」(ファイルIOの各種類、JDBCプログラミングのConnection、Sttementなどのインターフェースを含む)を書き換えて、書き換えた後の資源類はAutoClose bleまたはClose bleインターフェースを実現しました。
以上のような浅談java 7の強化されたtry文の資源を閉じるということは、小編集が皆さんに提供した内容の全部を共有します。