컴파일 에러 : 컴파일 시에 발생하는 에러
런타임 에러 : 실행 시에 발생하는 에러
논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것
자바에서는 실행(runtime) 시 발생할 수 있는 프로그램 오류를
'에러', '예외' 두 가지로 구분한다.
에러가 발생하면, 프로그램의 비정상적인 종료를 막을 길이 없지만,
예외는 발생하더라도 프로그래머가 이에 대한 비정상적인 종료를 막을 수 있다.
예외(Exception)
모든 클래스이 조상은 Object이므로 Exception과 Error클래스 역시 자손이다.
모든 예외의 최고 조상은 Exception이다.
크게 두 가지로 나뉜다.
1. Exception클래스와 그 자손들(IOEception, ClassNotFoundException..)
2. RuntimeException클래스와 그 자손들 (ClassCastException, NullpointerException, IndexOutOfBoundsException ...)
RuntimeException클래스들은 주로 프로그래머의 실수에 의해서 발생될 수 있는 예외들
Exception클래스들은 주로 외부의 영향으로 발생할 수 있는 것들로서, 프로그램의 사용자들의 동작에 의해서 발생하는 경우가 많다. (ex. 존재하지 않는 파일의 이름 입력 .. )
예외처리(Exception handling)
class ExceptionEx01 {
public static void main(String[] args)
{
try {
try { } catch (Exception e) { }
} catch (Exception e) {
try { } catch (Exception e) { } // 에러. 변수 e가 중복 선언되었다.
} // try-catch의 끝
try {
} catch (Exception e) {
} // try-catch의 끝
} // main메서드의 끝
}
하나의 try블럭 다음에는 여러 종류의 예외를 처리할 수 있도록
하나 이상의 catch블럭이 올 수 있으며
이 중 발생한 예외의 종류와 일치하는 단 한개의 catch블럭만 수행된다.
일치하는 catch가 없으면 처리되지 않는다.