- CallException
public class CallException extends Exception {
public CallException(String message) {
super(message);
}
}
- CloseException
public class CloseException extends Exception {
public CloseException(String message) {
super(message);
}
}
- ResourceV2
AutoCloseable을 implements 하여 try-with-resources를 사용하자
public class ResourceV2 implements AutoCloseable {
private String name;
public ResourceV2(String name) {
this.name = name;
}
public void call() {
System.out.println(name + " call");
}
public void callEx() throws CallException {
System.out.println(name + " callEx");
throw new CallException(name + " ex");
}
@Override
public void close() throws CloseException {
System.out.println(name + " close");
throw new CloseException(name + " ex");
}
}
- ResurceCloseMainV4
public class ResourceCloseMainV4 {
public static void main(String[] args) {
try {
logic();
} catch (CallException e) {
System.out.println("CallException 예외 처리");
Throwable[] suppressed = e.getSuppressed();
for (Throwable throwable : suppressed) {
System.out.println("suppressedEx = " + throwable);
}
throw new RuntimeException(e);
} catch (CloseException e) {
System.out.println("CloseException 예외 처리");
throw new RuntimeException(e);
}
}
private static void logic() throws CallException, CloseException {
try (ResourceV2 resource1 = new ResourceV2("resource1");
ResourceV2 resource2 = new ResourceV2("resource2")) {
resource1.call();
resource2.callEx(); // CallException
} catch (CallException e) {
System.out.println("ex: " + e);
throw e;
}
}
}
- 항상 try-with-resources를 사용할 수 있는 것은 아니다. 그렇지 않은 경우는 finally를 사용하여 처리해야한다.
'개발이 좋아서 > Java가 좋아서' 카테고리의 다른 글
네트워크 예외1 - 연결 예외 (1) | 2024.11.30 |
---|---|
네트워크 - 프로그램 예제 (0) | 2024.11.30 |
네트워크 - 인터넷 통신 / IP(Internet Protocol) / TCP, UDP / PORT / DNS (0) | 2024.11.27 |
파일 복사 최적화 (0) | 2024.11.27 |
Files로 문자 읽고 쓰기 (0) | 2024.11.27 |