ホームページ  >  記事  >  Java  >  リソースを閉じるための Java7 強化された try ステートメントの簡単な紹介

リソースを閉じるための Java7 強化された try ステートメントの簡単な紹介

黄舟
黄舟オリジナル
2017-06-04 09:11:401155ブラウズ

以下のエディターでは、Java 7 の強化された 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 キーワードを続けることができ、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 ブロックも含めることはできません。

注:

自動的に閉じられるリソースは、Closeable または AutoCloseableインターフェースを実装する必要があります。 (Closeable は AutoCloseable のサブインターフェイスです。Closeeable インターフェイスの close() メソッド ステートメントは IOException をスローします。AutoCloseable インターフェイスの close() メソッド ステートメントは Exception をスローします。)

クローズするリソースは try の後に配置する必要があります。ステートメント 括弧内で宣言および初期化されます。プログラムにリソースを自動的に閉じる必要がある try ステートメントがある場合、複数の catch ブロックとfinally ブロックを含めることができます。 Java7 は、ほぼすべての「リソース クラス」を書き換えました (ファイル IO、接続、ステートメント、および JDBC プログラミング

のその他のインターフェースのさまざまなクラスを含む)。書き換えられたリソース クラスはすべて、AutoCloseable または Closeable インターフェースを実装しています

以上がリソースを閉じるための Java7 強化された try ステートメントの簡単な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。