Maison >Java >javaDidacticiel >Fermer les instances de ressources à l'aide des instructions 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(); } } } } }
Utiliser le bloc final pour fermer les ressources physiques afin d'assurer la fermeture l’opération sera toujours exécutée.
Avant de fermer chaque ressource, assurez-vous d'abord que la variable de référence référençant la ressource n'est pas nulle.
Utilisez un bloc try...catch distinct pour chaque ressource physique afin de fermer la ressource afin de garantir que les exceptions provoquées lors de la fermeture de la ressource n'affecteront pas la fermeture des autres ressources.
La méthode ci-dessus rend le code du bloc final très volumineux et la lisibilité du programme est réduite.
Afin de résoudre les problèmes de méthode traditionnelle ci-dessus, Java7 a ajouté une nouvelle fonction pour fermer automatiquement l'instruction try des ressources. Il permet à une paire de parenthèses d'être suivie du mot-clé try, dans lequel une ou plusieurs ressources peuvent être déclarées et initialisées. Les ressources font ici référence aux ressources qui doivent être explicitement fermées à la fin du programme (connexions à la base de données, connexions réseau, etc.). .) , l'instruction try fermera automatiquement ces ressources à la fin de l'instruction.
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(); } } }
Une instruction try qui ferme automatiquement une ressource équivaut à inclure un bloc final implicite (utilisé pour fermer la ressource), donc cette instruction try ne peut avoir ni un bloc catch ni un enfin morceau.
Remarque :
Les ressources qui sont automatiquement fermées doivent implémenter l'interface Closeable ou AutoCloseable. (Closeable est une sous-interface d'AutoCloseable. L'instruction de méthode close() dans l'interface Closeeable lève IOException ; l'instruction de méthode close() dans l'interface AutoCloseable lève Exception)
La ressource fermée doit être déclarée et initialisée entre parenthèses après l'instruction try. Si le programme dispose d'une instruction try qui doit fermer automatiquement les ressources, il peut inclure plusieurs blocs catch et un bloc enfin.
Java7 a réécrit presque toutes les "classes de ressources" (y compris diverses classes de fichiers IO, Connection, Statement et autres interfaces de programmation JDBC...). les classes de ressources implémentent l'interface AutoCloseable ou Closeable
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!