본문 바로가기
Java의 정석/예외처리

예외처리 07 ~ 08 - printStackTrace(), 멀티 catch 블럭

by Hwanii_ 2023. 8. 20.
728x90

1.

try 블럭 내부에 작성된 코드에서 예외가 발생 하면,

발생한 예외에 대한 예외 객체가 생성 된다.

 

이 예외 객체에는 예외에 대한 정보를 가지고 있다.

또한, 메서드 들을 가지고 있다.

 

그 중, 대표적으로 사용되는 메서드가 있는데,

printStackTrace() 와, getMessage() 이다.

 

이러한 메서드들을 사용해서, 예외에 대한 정보들을 가져 올 수 있게 된다.

 

2.

printStackTrace() 메서드 :

예외 발생 당시의 호출 스택 (Call Stack) 에 있었던 메서드의 정보와,

예외 메시지를 화면에 출력.

 

getMessage() 메서드 :

발생한 예외 클래스의 인스턴스에 저장된 메세지를 얻을 수 있다.

 

 

그외에, 여러가지 메서드들이 존재 한다.

 

3.

예시)

 

 

catch문의 인자에 있는 ArithmeticException 과 참조변수 ae 를 확인 할 수 있고,

참조변수를 가지고 메서드를 사용하는 모습도 볼 수 있다.

 

ae.printStackTrace() 를 작성함으로써,

 

java.lang.ArithmeticException: /

by zero at Ex8_5.main(Ex8_5.java:9) 라는 문구가 출력되고,

 

ae.getMessage() 를 작성함으로써, by zero 문구가 출력 됬다.

 

근데, 원래 콘솔 결과로 하면,

1

2

3

java.lang.ArithmeticException: / by zero at Ex8_5.main(Ex8_5.java:8)

예외메시지 : / by zero

6

 

// 이렇게 떠야하는데, 왜 위와 같이 뜨는지 모르겠음.

// 나중에 수정 하겠음..

 

4.

멀티 catch 블럭

 

내용이 같은 catch 블럭을 하나로 합친 것을 의미 한다.

(JDK 1.7 버전 이상 부터 지원 한다)

 

 

위와 같이,

printStackTrace() 메서드 사용이 동일 하기 때문에, 

| 기호로 연결 하여, 둘을 합칠 수 있다.

(논리 연산자 아니다)

 

 

참고로 연결할 수 있는 예외 클래스의 개수에는 제한이 없다.

 

그리고,

예외 객체가 부모와 자식의 관계 일 때, 위와 같이 작성 하면,

컴파일 에러가 발생 하게 된다.

 

부모 예외 객체가 자식 예외 객체 까지 포함 하기 때문에,

의미상 동일 해서 에러가 발생 하는 것이다.

 

반응형