try-catch-finally중에 catch나 finally 중 하나를 생략할 수 있다. 둘 다 생략은 안된다.
try-catch
public class Exception {
public static void main(String[] args) {
try {
System.out.println("Exception STEP");
throw new Exception();
} catch (Exception e) {
System.out.println("Exception STEP 2");
}
}
}
public class Exception {
public static void main(String[] args) {
try {
System.out.println("Exception STEP");
} finally {
System.out.println("Exception STEP 2);
}
}
}
위의 두 코드의 실행 결과는 같다.
Checked Exception
라고도 하며 자바 소스를 컴파일하는 과정에서 예외 처리가 필요한지 검사하는 것으로 해당 예외는 개발자가 반드시 처리해야 한다.Java.lang.Exception
클래스를 상속받는다.Unchecked Exception
라고도 하며 컴파일하는 과정에서 예외 처리 코드를 검사하지 않는 예외를 말하며 예외처리가 필수는 아니다.RunTimeException
을 상속받는 클래스들이다.RuntimeException
, 즉 실행 예외의 예시에 대하여 나열하자면
예외 | 예외 발생 상황 |
---|---|
IllegalStateException | 부적절한 때에 메서드가 호출된 경우 |
IllegalArgumentException | 부적절한 인수를 메서드에 전달 했을 때 |
IllegalMonitorStateException | 스레드가 스레드의 속하지 않는 객체를 모니터 하려고 할 때 |
NegativeArraySizeException | 배열의 크기가 음수인 경우 |
ArrayStoreException | 배열 유형이 허락하지 않는 객체를 배열에 저장하려 할 때 |
ArrayIndexOutOfBoundsException | 배열에서 인덱스 범위를 초과하여 사용할 때 |
ArithmeticException | 숫자를 0으로 나누는 등의 불가능한 산술연산을 수행할 때 |
NumberFormatException | 숫자 형식이 아닌 데이터를 숫자로 변경하려고 했을 때 |
ClassCastException | 클래스에 대한 불가능한 타입변환을 시도하려고 했을 때 |
NullPointerException | 객체 참조가 없는 상태일 때 |
OutOfMemoryException | 사용 가능한 메모리가 없는 경우 |
자주 접하는 일반 예외 (Other Exception)의 종류는 이 정도 있다.
예외 | 예외 발생 상황 |
---|---|
IOException | 입/출력 작업 과정에서 문제가 발생했을 때 |
SQLException | 데이터베이스 연동 과정에서 문제가 발생했을 때 |
ClassNotFoundException | 존재하지 않는 클래스를 사용하려고 했을 때 |