class ExceptionTest {
public static void main(String [] args) {
throw new Exception(); // Exception을 고의로 발생
}
}
위 코드를 컴파일 하면 아래와 같은 에러가 발생한다.
ExceptionTest.java:3: unreported exception java.lang.Exception; must be caught or declared to be thrown
throw new Exception
^
1 error
앞서 분류한 'Exception클래스와 그 자손들(checked예외)'이 발생할 가능성이 있는 문장들에 대해 예외처리를 해주지 않으면 컴파일조차 되지 않는다.
class RuntimeExceptionTest {
public static void main(String [] args) {
throw new RuntimeException(); //RuntimeException을 고의로 발생
}
}
하지만 위 코드는 컴파일을 성공적으로 끝낸다. 물론 이 코드도 컴파일 후 실행과 동시에 런타임 오류를 발생시켜 비정상적으로 프로그램이 종료되긴하나, 둘다 고의로 발생시켰고 둘다 try-catch로 확인하지 않았는데 왜 다를까?
'RuntimeException클래스'와 그 자손(unchecked예외)에 해당하는 예외는 프로그래머가 실수로 발생하는 것들이기 때문에 예외처리를 강제하지 않는 것이다. 만일 RuntimeException클래스들에 속하는 예외가 발생할 가능성이 있는 코드에도 예외처리를 해야 한다면, 모든 참조 변수와 배열이 사용되는 곳을 try-catch로 예외처리 해 주어야 할것이다.