티스토리 뷰
예외처리
전 포스팅에서는 예외에 대해서 포스팅했다.
그렇다면 프로그램의 비정상적인 종료를 막고, 그런 예외상황을 처리하기 위해서는 어떻게 해야할까?
바로 예외처리코드를 작성해야한다.
예외처리 코드는 try-catch-finally 블록을 이용하여 작성한다.
try-catch-finally 블록의 구조는 다음과 같다.
try[
//예외 발생 코드
} catch (예외 클래스 e) {
//예외가 발생했을 때, 처리방법
} finally {
//항상 실행할 코드
}
try-catch 블록은 예외가 발생할것 같은 코드를 드래그한 후, 마우스 오른쪽 버튼을 클릭 -> Surround With -> try/catch block을 선택하여 쉽게 작성할 수 있다.
코드를 작성하다보면, 여러가지 예외상황이 발생한다.
즉, try-catch 블록을 사용하여 일괄적으로 예외상황을 처리하는 것이 아니라 각각의 예외상황을 처리해야할 경우가 있다.
그런 경우, 우리는 다중 catch 문을 사용한다.
즉, 다음과 같은 코드가 가능하다는 것이다.
try{
ArrayIndexOutOfBoundsException 발생
System.out.println("ArrayIndex 예외 통과");
NumberFormatException 발생
System.out.println("Number 예외 통과");
} catch (ArrayIndexOutOfBoundsException e) {
예외 처리1
} catch (NumberFormatException e) {
예외 처리2
} catch (Exception e) {
예외 처리3
}
만약, ArrayIndexOutOfBoundsException이 발생했다면, 예외처리1번을 실행할 것이다.
하지만, "ArrayIndex 예외 통과"는 출력되지 않을것이다.
왜냐하면, ArrayIndexOutOfBoundsException이 발생하면, 바로 catch 문으로 커서가 이동하기 때문이다.
그러므로, 코딩을 할 때 유의해야한다.
꼭 실행해야만하는 코드가 있다면 finally 문에 써야한다.
다중 catch문을 사용할 때는 순서 또한 유의해야한다.
현재 catch 문은 다음과 같이 진행한다.
(예외 발생! -> 첫번째 catch문 : ArrayIndexOutOfBoundsException 체크 -> 아닐 경우, 두번째 catch문 : NumberFormatException 체크 -> 아닐 경우, 세번째 catch문 : Exception 체크)
첫번째 catch문에서 예외가 처리 되었으면, 다른 catch문은 확인하지 않는다.
그러므로, 첫번째 catch문으로 모든 예외상황이 들어있는 catch (Exception e) 를 쓴다면, 그 뒤에 catch문은 절대 실행되지 않을 것이다.
즉, 다중 catch문을 코딩할때는 순서를 꼭 유의해 주어야 한다.
다음은 try-catch문의 예제 코드이다.
TryCatchFinallyEx.java
public class TryCatchFinallyEx {
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] strArray = {"10", "2a"};
int value =0;
for(int i=0; i<=2; i++) {
try {
value = Integer.parseInt(strArray[i]);
} catch (ArrayIndexOutOfBoundsException e) {
// TODO Auto-generated catch block
System.out.println("인덱스를 초과했음");
} catch (NumberFormatException e) {
// TODO: handle exception
System.out.println("숫자로 변환할 수 없음");
} finally {
System.out.println(value);
}
}
}
}
'JAVA' 카테고리의 다른 글
[java/DB] java에서 DB 데이터 INSERT, SELECT, DELETE (삽입,출력,삭제) (0) | 2019.10.07 |
---|---|
[java/DB] java에서 DB 데이터 읽어오기 (0) | 2019.10.07 |
에러(Error)와 예외(Exception) (0) | 2019.09.24 |
ArrayList와 Iterator를 이용한 성적관리 프로그램 (0) | 2019.09.24 |
인터페이스의 타입변환 및 상속 (0) | 2019.09.23 |