source

Closeable 구현 또는 AutoCloseable 구현

gigabyte 2022. 9. 3. 13:26
반응형

Closeable 구현 또는 AutoCloseable 구현

the the the the the the the the the i i i i 。implements Closeableimplements AutoCloseable인터페이스입니다.

★★★★★★★★★★★★★★★★를 실장했을 때,interface Closeable가 Eclipse IDE 메서드를 .public void close() throws IOException.

다음을 사용하여 스트림을 닫을 수 있습니다.pw.close();인터페이스를 사용하지 않습니다.어떻게 걸 구현할 수 이해가 안 돼요?close()메서드를 지정합니다.그리고 이 인터페이스의 목적은 무엇입니까?

제가 것은 요? 어떻게 하면 다음 사항을 확인할 수 있습니까?IOstream★★★★★★★★★★★★★★★★★?

나는 아래의 기본 코드를 사용하고 있었다.

import java.io.*;

public class IOtest implements AutoCloseable {

public static void main(String[] args) throws IOException  {

    File file = new File("C:\\test.txt");
    PrintWriter pw = new PrintWriter(file);

    System.out.println("file has been created");

    pw.println("file has been created");

}

@Override
public void close() throws IOException {


}

AutoCloseable (Java 7에서 도입됨)를 사용하면 리소스 사용 시 다음 용어를 사용할 수 있습니다.

public class MyResource implements AutoCloseable {

    public void close() throws Exception {
        System.out.println("Closing!");
    }

}

이제 다음과 같이 말할 수 있습니다.

try (MyResource res = new MyResource()) {
    // use resource here
}

이 「JVM」을 합니다.close()자동으로 사용할 수 있습니다.

Closeable 는 오래된 인터페이스입니다.어떤 이유에서인지 언어 디자이너는 하위 호환성을 유지하기 위해 별도의 호환성을 만들기로 결정했습니다.이것은 모든 것을 가능하게 할 뿐만 아니라Closeable 투척 등)IOException는 리소스 되지만, 수 .close().

않은 " " "를 사용합니다.AutoCloseable 것입니다

Closeable 특히 I/O 스트림 전용으로 확장됩니다.IOExceptionException idempotent입니다.AutoCloseable을 사용하다

이 모든 것에 대해서는, 양쪽 인터페이스의 javadoc 를 참조해 주세요.

★★의 AutoCloseable (오류)Closeable)는 Java 7에서 도입된 try-with-resources 구성의 리소스로 클래스를 사용할 수 있도록 합니다.이것에 의해, 블록의 마지막에 이러한 자원을 자동적으로 닫을 수 있기 때문에, 다음의 순서를 추가할 필요는 없습니다.finally이치노

수 있는 이 해도 전혀 가 없습니다, 이 인터페이스를 구현하는 것은 전혀 의미가 없습니다.IOTest닫을 수 없습니다.인스턴스(instance) 메서드가 없기 때문에 인스턴스화할 수도 없습니다.인터페이스를 실장하는 것은, 클래스와 인터페이스 사이에 관계가 있는 것을 의미합니다.당신은 여기서 그런 관계가 없어요.

당신은 인터페이스에 대해 잘 모르는 것 같습니다.게시한 코드에서는 를 구현할 필요가 없습니다.

구현이 필요하거나 구현이 필요한 경우PrintWriter닫아야 하는 파일 또는 기타 리소스를 처리합니다.

고객의 실장에서는,pw.close(). 최종 블록에서 이 작업을 수행해야 합니다.

PrintWriter pw = null;
try {
   File file = new File("C:\\test.txt");
   pw = new PrintWriter(file);
} catch (IOException e) {
   System.out.println("bad things happen");
} finally {
   if (pw != null) {
      try {
         pw.close();
      } catch (IOException e) {
      }
   }
}

위의 코드는 Java 6 관련 코드입니다.Java 7에서는 이 작업을 보다 우아하게 수행할 수 있습니다( 답변 참조).

여기 작은 예가 있습니다.

public class TryWithResource {

    public static void main(String[] args) {
        try (TestMe r = new TestMe()) {
            r.generalTest();
        } catch(Exception e) {
            System.out.println("From Exception Block");
        } finally {
            System.out.println("From Final Block");
        }
    }
}



public class TestMe implements AutoCloseable {

    @Override
    public void close() throws Exception {
        System.out.println(" From Close -  AutoCloseable  ");
    }

    public void generalTest() {
        System.out.println(" GeneralTest ");
    }
}

출력은 다음과 같습니다.

GeneralTest 
From Close -  AutoCloseable  
From Final Block

최근에 Java SE 8 Programmer Guide ii Book을 읽었습니다.

나는 그 차이점에 대해 발견했다.AutoCloseableCloseable.

AutoCloseable인터페이스는 Java 7에서 도입되었습니다.그 이전에는 다른 인터페이스가 존재했습니다.Closeable다음과 같은 예외를 제외하고는 언어 디자이너가 원하는 것과 비슷했습니다.

  • Closeable에 대한 예외 유형을 제한합니다.IOException.
  • Closeable에서는, 실장이 빈약할 필요가 있습니다.

언어 설계자는 하위 호환성을 강조합니다.기존 인터페이스를 변경하는 것은 바람직하지 않기 때문에, 그들은 새로운 인터페이스를 만들었습니다.AutoCloseable이 새로운 인터페이스는 다음보다 덜 엄격합니다.Closeable.부터Closeable요건을 충족시키다AutoCloseable, 실장을 개시했습니다.AutoCloseable후자가 도입되었을 때.

try-with-resources진술.

try-with-resources statement는 입니다.try하나 이상의 리소스를 선언하는 문.aresource프로그램이 종료된 후 닫아야 하는 객체입니다.try-with-resources statement는 각 리소스가 스테이트먼트의 마지막에 닫히도록 합니다.구현되는 모든 객체java.lang.AutoCloseable를 실장하는 모든 오브젝트가 포함됩니다.java.io.Closeable를 리소스로 사용할 수 있습니다.

다음 예제에서는 파일에서 첫 번째 줄을 읽습니다.의 인스턴스를 사용합니다.BufferedReader파일에서 데이터를 읽습니다. BufferedReader프로그램이 종료된 후 닫아야 하는 리소스입니다.

static String readFirstLineFromFile(String path) throws IOException {
    try (BufferedReader br =
                   new BufferedReader(new FileReader(path))) {
        return br.readLine();
    }
}

이 예에서는 try-with-resources 문에 선언된 리소스가 BufferedReader입니다.선언문은 try 키워드 바로 뒤에 괄호 안에 표시됩니다.학급.BufferedReaderJava SE 7 이후에서는 인터페이스를 구현합니다.java.lang.AutoCloseable왜냐하면BufferedReaderinstance는 try-with-resource 스테이트먼트에서 선언되며 try 스테이트먼트가 정상적으로 완료되는지(메서드의 결과)에 관계없이 닫힙니다.BufferedReader.readLine던지기IOException).

Java SE 7 이전 버전에서는finallytry 문이 정상적으로 완료되었는지 또는 갑자기 완료되었는지 여부에 관계없이 리소스가 닫히도록 합니다.다음 예제에서는 를 사용합니다.finally대신 블록하다try-with-resources스테이트먼트:

static String readFirstLineFromFileWithFinallyBlock(String path)
                                                     throws IOException {
    BufferedReader br = new BufferedReader(new FileReader(path));
    try {
        return br.readLine();
    } finally {
        if (br != null) br.close();
    }

}

자료를 참고하세요.

언급URL : https://stackoverflow.com/questions/13141302/implements-closeable-or-implements-autocloseable

반응형