Java - 예외처리 ( printStackTrace() 와 getMessage() ) , 멀티 catch 블럭

춤추는개발자·2022년 11월 25일
0

Java 정리

목록 보기
23/59

예외가 발생하면 예외 객체가 만들어진다. 객체의 타입은 발생하는 예외에 따라서 정해진다. 그 객체에 예외에 대한 정보가 들어있고 메서드들을 가지고 있다. 예외가 일치하는 catch 블럭 내에서 참조변수를 통해 발생한 예외 객체를 사용할 수 있다.

printStackTrace()

  • 예외발생 당시의 호출스택(call stack)에 있었던 메서드의 정보와 예외 메시지를 화면에 출력하는 메서드이다.

getMessage()

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

멀티 catch블럭

  • 내용이 같은 catch블럭을 하나로 합친 것
  • 예외가 부모, 자식 관계라면 부모만 작성해도 된다.
try {

} catch (Exception1 a) {
   a.printStackTrace();
} catch (Exception2 a2) {
   a.printStackTrace();
}

위의 코드와 같이 동일한 내용을 가진 catch 블럭이 있다면 

try {

} catch ( Exception1 | Exception2 a) {
   a.printStackTrace();
 }
 
 이런식으로 처리하기. 
  • 위와 같이 멀티 catch 블럭을 사용하면 어떤 예외가 발생했는지 알 수 없기 때문에 공통 멤버만 호출해야 한다. 호출해야 한다면 instanceof 로 체크하고 형변환해서 호출이 가능하다. 아래 코드는 그 예를 보여주는 코드이다.
try {

} catch (Exception1 | Exception2 a) {
   a.method()1; // 예외가 발생한다. Exception1에만 선언된 메서드를 호출할 수 없다. 
   
   if ( a instanceof Exception1){
        Exception1 a1 = (Exception1)a;
        a1.method1(); // 이렇게 if 문을 이용해 instanceof로 체크하고 형변환을 한다면 Exception1에만 있는 메서드를 호출할 수 있다.
    }

0개의 댓글