Closeable 구현 또는 AutoCloseable 구현
the the the the the the the the the i i i i 。implements Closeable
및implements 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 스트림 전용으로 확장됩니다.IOException
Exception
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을 읽었습니다.
나는 그 차이점에 대해 발견했다.AutoCloseable
대Closeable
.
그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 키워드 바로 뒤에 괄호 안에 표시됩니다.학급.BufferedReader
Java SE 7 이후에서는 인터페이스를 구현합니다.java.lang.AutoCloseable
왜냐하면BufferedReader
instance는 try-with-resource 스테이트먼트에서 선언되며 try 스테이트먼트가 정상적으로 완료되는지(메서드의 결과)에 관계없이 닫힙니다.BufferedReader.readLine
던지기IOException
).
Java SE 7 이전 버전에서는finally
try 문이 정상적으로 완료되었는지 또는 갑자기 완료되었는지 여부에 관계없이 리소스가 닫히도록 합니다.다음 예제에서는 를 사용합니다.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
'source' 카테고리의 다른 글
java.lang 잡는 중Out Of Memory Error? (0) | 2022.09.03 |
---|---|
다양한 64비트 데이터 모델과 비교하여 32비트(size_t)의 사이즈는 어떻게 됩니까? (0) | 2022.09.03 |
스프링 테스트에서 환경 변수 또는 시스템 속성을 설정하는 방법은 무엇입니까? (0) | 2022.09.03 |
Spring Security 5 : ID "null"에 매핑된 PasswordEncoder가 없습니다. (0) | 2022.09.03 |
여러 키를 사용하여 맵을 구현하는 방법 (0) | 2022.09.03 |