티스토리 뷰

JAVA

예외처리

Y.일월 2019. 9. 25. 14:42

예외처리


전 포스팅에서는 예외에 대해서 포스팅했다.

그렇다면 프로그램의 비정상적인 종료를 막고, 그런 예외상황을 처리하기 위해서는 어떻게 해야할까?

바로 예외처리코드를 작성해야한다.


예외처리 코드는 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);

}

}


}


}


공지사항
최근에 올라온 글