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 ステートメントを追加しました。これにより、括弧の後に 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 インターフェイスを実装します。
以上がtry ステートメントを使用してリソース インスタンスを閉じるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。