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(); } } } } }
마지막 블록을 사용하여 물리적 리소스를 닫으면 닫는 작업이 항상 실행되도록 합니다.
각 리소스를 닫기 전에 먼저 리소스를 참조하는 참조 변수가 null이 아닌지 확인하세요.
리소스를 닫을 때 발생한 예외가 다른 리소스 닫는 데 영향을 미치지 않도록 각 물리적 리소스에 대해 별도의 try...catch 블록을 사용하여 리소스를 닫습니다.
위의 방법은 finally 블록 코드를 매우 비대하게 만들고 프로그램의 가독성을 떨어뜨립니다.
위의 전통적인 메서드 문제를 해결하기 위해 Java7에서는 리소스를 자동으로 닫는 새로운 try 문을 추가했습니다. 한 쌍의 괄호 뒤에 try 키워드가 올 수 있으며, 여기에서 하나 이상의 리소스를 선언하고 초기화할 수 있습니다. 여기서 리소스는 프로그램이 종료될 때 명시적으로 닫혀야 하는 리소스(데이터베이스 연결, 네트워크 연결 등)를 나타냅니다. .) , 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!