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(); } } } } }
Verwenden Sie den Block „finally“, um physische Ressourcen zu schließen und das Schließen sicherzustellen Der Vorgang wird immer ausgeführt.
Bevor Sie jede Ressource schließen, stellen Sie zunächst sicher, dass die Referenzvariable, die auf die Ressource verweist, nicht null ist.
Verwenden Sie für jede physische Ressource einen separaten try...catch-Block, um die Ressource zu schließen und sicherzustellen, dass beim Schließen der Ressource verursachte Ausnahmen keine Auswirkungen auf das Schließen anderer Ressourcen haben.
Durch die obige Methode wird der Final-Block-Code sehr aufgebläht und die Lesbarkeit des Programms verringert.
Um die oben genannten traditionellen Methodenprobleme zu lösen, hat Java7 eine neue Funktion hinzugefügt Um Ressourcen automatisch zu schließen, versuchen Sie es mit der Anweisung. Es ermöglicht, dass auf ein Klammerpaar das Schlüsselwort try folgt, in dem eine oder mehrere Ressourcen deklariert und initialisiert werden können. Die Ressourcen beziehen sich hier auf diejenigen Ressourcen, die beim Beenden des Programms explizit geschlossen werden müssen (Datenbankverbindungen, Netzwerkverbindungen usw.). .) schließt die try-Anweisung diese Ressourcen automatisch am Ende der Anweisung.
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(); } } }
Eine Try-Anweisung, die eine Ressource automatisch schließt, ist gleichbedeutend mit dem Einschließen eines impliziten Final-Blocks (der zum Schließen der Ressource verwendet wird). Daher kann diese Try-Anweisung weder einen Catch-Block noch enthalten ein endliches Stück.
Hinweis:
Ressourcen, die automatisch geschlossen werden, müssen die Closeable- oder AutoCloseable-Schnittstelle implementieren. (Closeable ist eine Unterschnittstelle von AutoCloseable. Die Methodenanweisung close() in der Schnittstelle Closeeable löst eine IOException aus; die Methodenanweisung close() in der Schnittstelle AutoCloseable löst eine Ausnahme aus)
Die geschlossene Ressource muss nach der try-Anweisung in Klammern deklariert und initialisiert werden. Wenn das Programm über eine Try-Anweisung verfügt, die Ressourcen automatisch schließen muss, kann sie mehrere Catch-Blöcke und einen Final-Block enthalten.
Java7 hat fast alle „Ressourcenklassen“ neu geschrieben (einschließlich verschiedener Klassen von Datei-IO, Verbindung, Anweisung und anderen Schnittstellen der JDBC-Programmierung ...). Ressourcenklassen implementieren die Schnittstelle AutoCloseable oder Closeable
Das obige ist der detaillierte Inhalt vonSchließen Sie Ressourceninstanzen mithilfe von Try-Anweisungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!