Uncaught Exception

woga·2021년 9월 26일
0

Android 공부

목록 보기
9/49

들어가기 전에..

exception은 error와 다르다.

시스템 레벨에서 오류 : error
개발자 레벨에서 오류: exception

그리고 Exception은

RunTime Exception 기준으로 checked, unchecked exception으로 나뉜다.

  • checked : 컴파일단계에서 남
  • uncheced : 실행하다 남

그럼 Uncatch excpetion은 무엇인가?

  • 보통 자바에서는 try-catch로 exception 처리를 한다
  • throw을 던져 예외 전파도 할 수 있다

하지만, 어떠한 예외처리를 하지 않을 경우에는 어떨까?

public class MainClass {
	public static void main(String[] args) {
    	int[] arr = new int[10];
        arr[21]= 10;
    }
}

그럼 이때 에러메세지가 발생하는데, 에러처리를 한게 없는데 에러메세지를 찍어준다.

ArrayIndexOutOfBoundsException

이유는? Uncaught Exception Handler

정답은, 자바의 Thread 클래스에 있는 UncaughtExceptionHandler라는 핸들러에 의해 기본적으로 등록된 핸들러에서 나머지 에러를 처리하게 된다.

따로 UncaughtExceptionHandler를 설정해주지 않은 경우, 자바에서 기본적으로 정의된 UncaughtExceptionHandler가 실행이 된다.

또한 위의 DefaultUncaughtExceptionHandler를 직접 정의해서 사용 가능하다.

위의 handler를 통해, 해당 예외가 발생한 스레드의 전체 스택트레이스, 스레드 이름, 예외가 발생한 함수의 스택 트레이스, 에러메세지, 에러가 발생한 클래스 이름, 메소드 이름, 파일 이름 등을 얻을 수 있다.

또한, 자바 디버깅 심볼 데이터가 살아있는 경우, 해당 에러가 발생한 라인 번호도 얻을 수 있다. (만약 디버깅 심볼 데이터가 없는 경우 Unknown이라고 뜬다.)

위에서 정의한 핸들로를 등록하는 방법은 다음과 같다.

Thread.setDefaultUncaughtExceptionHandler(new DefaultExceptionHandler());


Reference

https://semtax.tistory.com/81

https://www.nextree.co.kr/p3239/

profile
와니와니와니와니 당근당근

0개의 댓글