>  기사  >  Java  >  리소스를 닫는 Java7의 향상된 try 문에 대한 간략한 소개

리소스를 닫는 Java7의 향상된 try 문에 대한 간략한 소개

黄舟
黄舟원래의
2017-06-04 09:11:401156검색

다음 편집자는 Java7의 향상된 try 문 종료 리소스에 대한 간단한 토론을 제공합니다. 에디터가 꽤 좋다고 생각해서 지금 공유해서 참고용으로 올려보겠습니다. 편집기를 따라 살펴보겠습니다.

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

리소스를 닫는 전통적인 방법 span>

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 문

업로드 시스템 문제, 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프로그래밍 포함) a>의 연결, 명령문 및 기타 인터페이스...)가 다시 작성되었으며 다시 작성된 리소스 클래스가 AutoCloseable 또는 Closeable 인터페이스를 구현했습니다.

위 내용은 리소스를 닫는 Java7의 향상된 try 문에 대한 간략한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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