일반적으로 회복이 불가능한 문제
일반적으로 회복이 가능한 문제
확인된 예외를 처리해보자
class OurException extends Exception {
public OurException() {
super("예외처리입니다!");
}
}
class OurClass {
private final Boolean just = true;
public void thisMethodIsDangerous() throws OurException {
if (just) {
throw new OurException();
}
}
}
메소드(...)
+ throws
+ 예외클래스
throw
+new 예외클래스();
public class StudyException {
public static void main(String[] args) {
OurClass ourClass = new OurClass();
try {
// 1. 예외 발생 가능성 있는 메소드를 시도하는 블럭
ourClass.thisMethodIsDangerous();
} catch (OurException e) {
// 2. 예외 잡고 처리하는 블럭
System.out.println(e.getMessage());
} finally {
// 3. 무조건 실행되는 블럭
System.out.println("예외처리했습니다!");
}
}
}
문제 상황을 뜻하는 클래스
RuntimeException을 상속한 예외들은 UncheckedException, 그렇지 않은 예외들은 CheckedException으로 구현됨
initCause()
getCause()
// 연결된 예외
public class main {
public static void main(String[] args) {
try {
// 예외 생성
NumberFormatException ex = new NumberFormatException("가짜 예외이유");
// 원인 예외 설정(지정한 예외를 원인 예외로 등록)
ex.initCause(new NullPointerException("진짜 예외이유"));
// 예외를 직접 던집니다.
throw ex;
} catch (NumberFormatException ex) {
// 예외 로그 출력
ex.printStackTrace();
// 예외 원인 조회 후 출력
ex.getCause().printStackTrace();
}
// checked exception 을 감싸서 unchecked exception 안에 넣습니다.
throw new RuntimeException(new Exception("이것이 진짜 예외 이유 입니다."));
}
}
// 출력
Caused by: java.lang.NullPointerException: 진짜 예외이유
public String getDataFromAnotherServer(String dataPath) {
try {
return anotherServerClient.getData(dataPath).toString();
} catch (GetDataException e) {
return defaultData;
}
}
public void someMethod() throws Exception { ... }
public void someIrresponsibleMethod() throws Exception {
this.someMethod();
}
public void someMethod() throws IOException { ... }
public void someResponsibleMethod() throws MoreSpecificException {
try {
this.someMethod();
} catch (IOException e) {
throw new MoreSpecificException(e.getMessage());
}
}
🔗 스파르타코딩클럽 Java 문법 종합반
🔗 자바의 정석