1) printStackTrace(), getMessage()
- try 블록을 실행하다가 예외가 발생하면, 예외 객체가 만들어집니다.
예외 객체는 타입이 ArithmeticException 입니다.
이 객체에는 발생한 예외에 대한 정보가 들어 있습니다.
그리고 printStackTrace(), getMessage()와 같은 메소드들을 갖고 있습니다.
class Ex8_t{
public static void main(String[] args){
System.out.println(1);
System.out.println(2);
try{
System.out.println(3);
System.out.println(0/0);
System.out.println(4);
}catch(ArithmeticExcpetion ae){
ae.printStackTrace();
System.out.println("예외메시지: " + ae.getMessage());
}
System.out.println(6);
}
}
// 실행 결과
1
2
3
java.lang.ArithmeticException: / by zero at Ex8_5.main(Ex8_5.java:8)
예외 메시지 : / by zero
6
- printStackTrace(): 예외 발생 당시의 호출 스택(Call Stack)에 있었던 메서드의 정보와 예외 메시지를 화면에 출력합니다.
- getMessage(): 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있습니다.
2) 멀티 catch 블럭
- 멀티 catch 블럭은 내용이 같은 catch 블럭을 하나로 합친 것을 의미합니다.
단, 멀티 catch 블럭에 쓰는 두 클래스가 부모-자식 관계여서는 안됩니다.
try{ try{
}catch(Exception A){ }catch(Exception A | Exception B){
e.printStackTrace(); -> e.printStackTrace();
}catch(Exception B){ }
e.printStackTrace();
}
- 멀티 catch 블럭을 사용할 때는, 특정 클래스에만 선언되어 있는 메소드를 사용할 때 주의해야 합니다.
try{
}catch(ExceptionA | ExceptionB e){
e.methodA(); // 에러 ExceptionA에 선언된 methodA()는 호출 불가
if(e instanceof ExceptionA){
ExceptionA e1 = (ExceptionA)e;
e1.methodA(); // OK. ExceptionA에 선언된 메서드 호출 가능
}else if(e instanceof ExceptionB){
...
}
}
참고
남궁성 자바의 정석
'Java' 카테고리의 다른 글
예외 선언(Exception Handling) - 메서드에 예외 선언하기, finally 블럭 (0) | 2022.09.01 |
---|---|
예외 처리(Exception Handling)(4) - 예외 발생시키기 (0) | 2022.08.30 |
예외 처리(Exception handling)(2) - 예외 처리하기, try~catch문 흐름 (0) | 2022.08.30 |
예외 처리(Exception Handling)(1) - 프로그램 오류, 예외 클래스의 계층 구조 (0) | 2022.08.29 |
서비스 제공자 프레임워크 (0) | 2022.08.26 |