Java
예외 메시지 출력
무지맘
2022. 5. 24. 16:25
try 블록을 실행하다가 예외가 발생하게 되면 해당 예외 타입의 객체가 발생하게 된다. 이때 이 객체에는 여러 가지 정보가 들어있는데, 그중 이번에 볼 것은 메서드 2가지이다.
1. printStackTrace()
- 예외 발생 당시의 호출 스택(call stack)에 있었던 메서드 정보와 예외 메시지를 화면에 출력한다.
2. getMessage()
- 발생한 예외 클래스의 인스턴스에 저장된 메시지를 얻는다.
0으로 나누는 산술 예외를 발생시켜서 어떤 메시지를 얻을 수 있는지 살펴보자.
class Test{
public static void main(String args[]) {
System.out.println(1);
try {
System.out.println(2);
System.out.println(3/0); // 예외 발생
System.out.println(4); // 실행X
} catch(ArithmeticException ae){
ae.printStackTrace();
System.out.println("예외메시지 : " + ae.getMessage());
} catch(Exception e) {
System.out.println(5); // 실행X
}
System.out.println(6);
}
}
1) try 블록을 실행하다가 0으로 나누려는 코드 발견!
- ArithmeticException타입의 예외 객체 생성
2) try 블록을 빠져나가 첫 번째 catch 블록을 확인한다.
- 객체의 타입과 참조변수 ae의 타입이 일치하기 때문에 ae에 객체의 주소가 담긴다.
- 이때 ae의 유효 범위는 해당 catch 블록 내부
3) 해당 catch 블록을 실행하면 아래와 같은 결과가 나온다.
// 결과화면
1
2
java.lang.ArithmeticException: / by zero
at Test.main(Test.java:6)
예외메시지 : / by zero
6
a. 맨 위부터 실행
b. 6번째 줄에서 산술 예외 발생
- 예외가 발생한 곳에서 try 블록을 빠져나오기 때문에 4는 출력되지 않는다.
c. 첫 번째 catch 블록 수행
- printStackTrace() 실행 -> 에러 메시지 2줄 출력
- getMessage() 실행 -> 어떤 예외였는지 메시지로 알려줌
d. try-catch문을 완전히 빠져나온 후 6 출력