반응형
안녕하세요 알통몬입니다. 공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^ |
다중 catch
public class CatchByExceptionKindExample {
public static void main(String[] args) {
try {
String data1 = args[0];
String data2 = args[1];
int value1 = Integer.parseInt(data1);
int value2 = Integer.parseInt(data2);
int result = value1 + value2;
System.out.println(data1 + "+" + data2 + "=" + result);
} catch(ArrayIndexOutOfBoundsException e) {
System.out.println("실행 매개값의 수가 부족합니다.");
System.out.println("[실행 방법]");
System.out.println("java CatchByExceptionKindExample num1 num2");
} catch(NumberFormatException e) {
System.out.println("숫자로 변환할 수 없습니다.");
} finally {
System.out.println("다시 실행하세요.");
}
}
}
try 블록 내부는 다양한 종류의 예외가 발생할 수 있습니다.
발생 되는 예외별로 예외 처리 크드를 다르게 하려면 다중 catch 문을 작성하면 됩니다.
catch 블록의 예외 클래스 타입은 try 블록에서 발생된 예외의 종류를 말합니다.
try 블록에서 해당 타입의 예외가 발생하면 catch 블록을 실행하도록 되어있습니다.
catch 블록이 여러 개라고 해도 단 하나의 catch 블록만 실행됩니다.
try 블록에서 동시에 여러 예외가 발생하지 않고 하나의 예외가 발생하면
즉시 실행을 멈추고 해당 catch 문으로 이동하기 때문입니다.
예제)
catch 순서
다중 catch 블록을 작성할 때의 주의할 점 :
상위 예외 클래스가 하위 예외 클래스보다 아래쪽에 위치해야 한다는 것입니다.
try 블록에서 예외가 발생했을 때, 예외를 처리해줄 catch 블록은 위에서부터 차례대로 검색됩니다. 만약 상위 예외 클래스의 catch 블록이 위에 있다면, 하위 예외 클래스의 catch 블록은 실행되지 않습니다. 하위 예외는 상위 예외를 상속했기 떄문에 상위 예외타입도 되기 때문입니다.
옳바른 선언 예제)
public class CatchOrderExample {
public static void main(String[] args) {
try {
String data1 = args[0];
String data2 = args[1];
int value1 = Integer.parseInt(data1);
int value2 = Integer.parseInt(data2);
int result = value1 + value2;
System.out.println(data1 + "+" + data2 + "=" + result);
} catch(ArrayIndexOutOfBoundsException e) {
System.out.println("실행 매개값의 수가 부족합니다.");
} catch(Exception e) { //Exception 이 위에 있으면 안된다.
System.out.println("실행에 문제가 있습니다.");
} finally {
System.out.println("다시 실행하세요.");
}
}
}
multi catch : Java 7부터 가능함.
예제)
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class MultiCatchExample {
public static void main(String[] args) {
try {
String data1 = args[0];
String data2 = args[1];
int value1 = Integer.parseInt(data1);
int value2 = Integer.parseInt(data2);
int result = value1 + value2;
System.out.println(data1 + "+" + data2 + "=" + result);
} catch(ArrayIndexOutOfBoundsException | NumberFormatException e) {
System.out.println("실행 매개값의 수가 부족하거나 숫자로 변환할 수 없습니다..");
} catch(Exception e) {
System.out.println("알수 없은 예외 발생");
} finally {
System.out.println("다시 실행하세요.");
}
}
}
catch괄호() 안에 동일하게 처리하고 싶은 예외를 |로 연결하면 됩니다.
ArrayIndexOutOfBoundsException | NumberFormatException
반응형
'자바' 카테고리의 다른 글
JAVA 자바 예외처리 : 예외 떠넘기기 (0) | 2017.03.13 |
---|---|
JAVA 자바 예외처리 : 자동 리소스 닫기 (0) | 2017.03.13 |
JAVA 자바 예외처리: 예외 처리 코드 (0) | 2017.03.13 |
JAVA 자바 예외처리 : 실행 예외 - ClassCastException (0) | 2017.03.13 |
JAVA 자바 예외처리 : 실행 예외 - NumberFormatException (0) | 2017.03.13 |