exception은 error와 다르다.
시스템 레벨에서 오류 : error
개발자 레벨에서 오류: exception
RunTime Exception
기준으로 checked
, unchecked
exception으로 나뉜다.
try-catch
로 exception 처리를 한다예외 전파
도 할 수 있다하지만, 어떠한 예외처리를 하지 않을 경우에는 어떨까?
public class MainClass {
public static void main(String[] args) {
int[] arr = new int[10];
arr[21]= 10;
}
}
그럼 이때 에러메세지가 발생하는데, 에러처리를 한게 없는데 에러메세지를 찍어준다.
ArrayIndexOutOfBoundsException
정답은, 자바의 Thread 클래스에 있는 UncaughtExceptionHandler
라는 핸들러에 의해 기본적으로 등록된 핸들러에서 나머지 에러를 처리하게 된다.
따로 UncaughtExceptionHandler
를 설정해주지 않은 경우, 자바에서 기본적으로 정의된 UncaughtExceptionHandler
가 실행이 된다.
또한 위의 DefaultUncaughtExceptionHandler
를 직접 정의해서 사용 가능하다.
위의 handler를 통해, 해당 예외가 발생한 스레드의 전체 스택트레이스, 스레드 이름, 예외가 발생한 함수의 스택 트레이스, 에러메세지, 에러가 발생한 클래스 이름, 메소드 이름, 파일 이름 등을 얻을 수 있다.
또한, 자바 디버깅 심볼 데이터가 살아있는 경우, 해당 에러가 발생한 라인 번호도 얻을 수 있다. (만약 디버깅 심볼 데이터가 없는 경우 Unknown이라고 뜬다.)
위에서 정의한 핸들로를 등록하는 방법은 다음과 같다.
Thread.setDefaultUncaughtExceptionHandler(new DefaultExceptionHandler());