class Ex8_5{
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(ArithmeticException 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
try{
...
} catch(ExceptionA e){
e.printStackTrace();
} catch(ExceptionB e2){
e2.printStackTrace();
}
이렇게 내용이 같은 catch블럭을 하나로 합친다.
try{
...
} catch(ExceptionA | ExceptionB e){
e.printStackTrace();
}
이렇게는 쓰지 않는다.
try{
...
}catch (ParentException | childException e){ //에러 부모자식 관계에서는 쓰지 않는다. instanceof 연산자는 어차피 부모관계까지 모두 파악하기 때문에 굳이 쓸 필요가 없다.
e.printStackTrace();
}
try{
...
}catch(ExceptionA | ExceptionB e){
e.methodA(); // 에러! ExceptionA에 선어된 methodA() 호출불가
ExceptionA와 ExceptionB 중에서 어떤 객체가 올지 모르기 때문에 공통적으로 가진 멤버만 사용 가능
if(e instanceof ExceptionA){
ExceptionA e1 = (ExceptionA)e;
e1.methodA(); // OK. ExceptionA에 선언된 메서드 호출가능
}else{ //if(e instanceof ExceptionB )
...
}
}