>  기사  >  Java  >  try 문을 사용하여 리소스 인스턴스 닫기

try 문을 사용하여 리소스 인스턴스 닫기

PHP中文网
PHP中文网원래의
2017-06-21 17:02:011579검색

리소스를 닫는 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();
                }
            }
        }
    }
}
  • 마지막 블록을 사용하여 물리적 리소스를 닫으면 닫는 작업이 항상 실행되도록 합니다.

  • 각 리소스를 닫기 전에 먼저 리소스를 참조하는 참조 변수가 null이 아닌지 확인하세요.

  • 리소스를 닫을 때 발생한 예외가 다른 리소스 닫는 데 영향을 미치지 않도록 각 물리적 리소스에 대해 별도의 try...catch 블록을 사용하여 리소스를 닫습니다.

    위의 방법은 finally 블록 코드를 매우 비대하게 만들고 프로그램의 가독성을 떨어뜨립니다.

java7은 리소스를 닫는 향상된 try 문

위의 전통적인 메서드 문제를 해결하기 위해 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.