Catch절의 특징
- 하나의 try에 catch절을 여러개 사용할 수도 있다.
- 여러개 사용시 자식 예외클래스부터 catch해야한다.
- 부모 예외 클래스를 자식 예외 클래스보다 상위에 위치시켜놓으면 부모가 예외를 모두 잡아버리기 때문에 자식예외클래스의 catch block이 되어 컴파일이 안된다.
▲ 위 코드에서는 다양한 에러가 발생할 수 있다. sc.nextLine()에서는 숫자형식이 아닌 문자열이 입력될 때는 NumberFormatException이, sc.nextInt()에 숫자가 아닌 것이 입력될 때는 InputMismatchException이, 마지막행에서 두 숫자 나누기 시 arr[1]이 0이라면 ArithmeticException이 발생할 수 있다.
다양한 예외에러가 생길 수 있기 때문에 이를 모두 예외처리하기 위해서 여러개의 catch를 사용하여 예외처리를 할 수있다는 것이다.
▲ 위에서 보듯이 Exception으로 끝나는 모든 예외들은 Exception을 부모클래스로 가진다.
▲ 위처럼 Exception을 가장 최상위에 예외처리로 두면 모든 Exception에러가 발생했을 때 catch Exception에서 모든 에러를 다 잡기 때문에 아래에 우리가 지정해두었던 catch에 있는 출력문들을 실행할 수 없게된다. 즉 부모 예외클래스인 Exception에서 예외처리를 다 해버리고 "예외가 발생했어요"를 출력하고 try~catch문이 종료되어버리기 때문이다.
따라서 여러개의 catch절을 사용할 때는 Exception과 같은 부모 예외클래스를 가장 밑에 위치시킴으로써 위에서 우리가 잡지못했던 예외들을 마지막에 잡게 시키는 것이다.
▲ 위처럼 부모 예외클래스를 가장 하단에 배치하는 것이 옳다.
또는 모든 Exception의 예외를 한번에 처리하고 싶으면
▲ 위와 같이 Exception하나만 사용해서 하나하나 귀찮게 세분화하지 않아도 된다는 장점이 있지만, 예외처리를 세분화하지 않아서 각각의 예외별로 메세지를 다르게 할 수 없다는 단점이 있다.
'Java' 카테고리의 다른 글
[Java]예외처리 - part4. finally (0) | 2022.03.22 |
---|---|
[Java]예외처리 - part3. throws (0) | 2022.03.21 |
[Java]예외처리 - part1. Basic (0) | 2022.03.21 |
[Java]Map계열 - Hashtable (0) | 2022.03.19 |
[Java]Map계열 - HashMap (0) | 2022.03.18 |