checked exception(compile time exception): 확인을 해야하는 예외. 본인이 처리하든지, 부모나 클라이언트에게 다시 던져줄지 결정. 무시할 수 없음. 무시하면 컴파일 에러 발생. Exception 상속
unchecked exception(run time exception): 컴파일 시점에 예외처리했는지 확인하지 않음. 책임을 클라이언트에 넘긴다. RuntimeException 상속.
catch에서 발생한 에러는 그다음 catch에서 잡을수없다
try {
throw new CustomException();
} catch(CustomException e) {
throw new CustomTwoException();
} catch(CustomTwoException e) {
여기서 CustomTwoException을 잡아줄 수 없다!
}
복구: 정상 상태로 되돌려 놓는 방법.
// 복구
void method() {
try {
call();
} catch(CallException e) {
otherCall();
}
}
회피: 예외처리를 담당하지 않고, 호출한 곳으로 예외를 던져주는 것
// 회피
void method() throws CallException {
call();
}
전환: 발생한 예외를 잡아 적절한 예외로 다시 던져주는 것
// 전환
void method() throws CallException {
try {
call();
} catch (CallException e) {
throw new OtherException();
}
}
무시: 예외 무시
// 무시
void method() {
try {
return call();
} catch (CallException ignored) { }
}
IllegalArgumentException: null이 아닌 인자의 값이 잘못된 경우. 메소드를 호출할 때 인자로 잘못된 값을 넘기는 경우.
IllegalStateException: 객체 상태가 메서드 호출을 처리하기에 적절하지 않은 경우.
NullPointException: null을 받으면 안 되는 인자에 null이 전달된 경우.
IndexOutOfBoundsException: 인덱스 허용 범위를 벗어난 경우.
ConcurrentModificationException: 병렬적 사용이 금지된 객체에 대한 병렬 접근이 탐지 된 경우.
UnsupportedOperationException: 객체가 해당 메서드를 지원하지 않는 경우.
ArithmeticException: 비정상 계산을 한 경우.(ex. 어떤 수 / 0)
NumberFormatException: Null이나 잘못된 값을 어떤 수로 형변환 한 경우.