충분히 쌓여가는
11.3 예외 종류에 따른 처리 - 예외 순서, 다중 catch 본문
다중 catch
try 블록에는 다양한 종류의 예외가 발생할 수 있다
예외에 따라 예외 처리 코드를 다르게 작성할 수 있다
catch 블록이 여러 개라 할지라도 catch 블록은 단 하나만 실행된다
: try 블록에서 동시 다발적으로 예외가 발생하지 않으며, 하나의 예외가 발생하면 즉시 실행을 멈추고 해당 catch 블록으로 이동하기 때문
예제
배열의 인덱스가 초과되었을 경우 발생하는 ArrayIndexOutOfBoundsException과
숫자 타입이 아닐 때 발생하는 NumberFormatException을 각각 다르게 예외 처리한다
package ch11.sec02.exam03;
import java.util.Iterator;
public class ExceptionHandlingExample {
public static void main(String[] args) {
String[] array = {"100", "1oo"};
for(int i=0; i<=array.length; i++) {
try {
int value = Integer.parseInt(array[i]);
System.out.println(value);
} catch(ArrayIndexOutOfBoundsException e) {
System.out.println("배열 인덱스 초과: " + e.getMessage());
} catch(NumberFormatException e) {
System.out.println("숫자로 변환할 수 없음: " + e.getMessage());
}
}
}
}
100
숫자로 변환할 수 없음: For input string: "1oo"
배열 인덱스 초과: Index 2 out of bounds for length 2
예제
처리해야할 예외 클래스들이 상속 관계에 있을 떄
하위 클래스 catch 블록을 먼저 작성하고, 상위 클래스 catch 블록을 나중에 작성해야 한다
(catch 블록은 위에서 차례대로 검사 대상이 되는데, 상위 클래스 catch 블록이 먼저 검사 대상이 되면 안된다)
package ch11.sec03.exam02;
public class ExceptionHandlingExample {
public static void main(String[] args) {
String[] array = {"100", "1oo"};
for(int i=0; i<=array.length; i++) {
try {
int value = Integer.parseInt(array[i]);
System.out.println(value);
} catch(ArrayIndexOutOfBoundsException e) {
System.out.println("배열 인덱스 초과: " + e.getMessage());
} catch(Exception e) { // 상위 예외 클래스는 아래 쪽에 작성
System.out.println("숫자로 변환할 수 없음: " + e.getMessage());
}
}
}
}
100
숫자로 변환할 수 없음: For input string: "1oo"
배열 인덱스 초과: Index 2 out of bounds for length 2
예제
두 개 이상의 예외를 하나의 catch 블록으로 동일하게 예외처리
catch 블록에 예외 클래스르 기호 |로 연결
package ch11.sec03.exam03;
public class ExceptionHandlingExample {
public static void main(String[] args) {
String[] array = {"100", "1oo", null, "200"};
for(int i=0; i<=array.length; i++) {
try {
int value = Integer.parseInt(array[i]);
System.out.println(value);
} catch(ArrayIndexOutOfBoundsException e) {
System.out.println("배열 인덱스 초과: " + e.getMessage());
} catch(NullPointerException | NumberFormatException e) {
System.out.println("데이터 문제가 있음: " + e.getMessage());
}
}
}
}
100
데이터 문제가 있음: For input string: "1oo"
데이터 문제가 있음: Cannot parse null string
200
배열 인덱스 초과: Index 4 out of bounds for length 4
'이것이 자바다 > 11 예외 처리' 카테고리의 다른 글
11.6 사용자 정의 예외 (0) | 2024.04.08 |
---|---|
11.5 예외 떠넘기기 - throws (0) | 2024.04.08 |
11.2 예외 처리 코드 (0) | 2024.04.08 |
11.1 예외와 예외 클래스 (0) | 2024.04.08 |
이것이 자바다 11장 확인문제 (0) | 2024.02.05 |