Programming language/Java

[Java]try catch finally

  • -
반응형

오늘은 자바의 예외처리 try catch finally문에 대해 정리를 해보려고 합니다.


try catch finally

우리가 사용하는 프로그램은 수행 중 예상치 못한 상황에 맞닥뜨릴 수 있습니다. 이를 오류(Error)라고 하는반면 예상을 할 수 있는 상황이 있는데 이를 예외(Exception)라고 합니다.

 

예외가 발생하면 프로그램은 비정상 종료됩니다. 따라서 예외 처리를 해주어 프로그램이 비정상 종료되는 것을 미연에 방지해주는 것이 좋습니다.

 

자바에서는 예외가 발생하면 JVM(자바가상머신)이 관련 예외 클래스에서 예외 객체를 생성해 넘겨줍니다. 우리는 JVM으로부터 받은 예외 객체를 try catch finally로 잡아주면 됩니다.

 

결론적으로 try catch finally는 자바의 예외처리를 핸들링하는 것입니다. 참고로 finally는 생략이 가능합니다.

예외처리는 아래의 구문을 따라 이루어집니다.

try  {
  // 예외 발생이 예상되는 부분
} catch(Exception e) {
  // 예외가 발생했을 때 처리하는 부분
} finally {
  // 예외 발생여부에 관계없이 실행되는 부분
}

catch 블록의 변수에는 예외 클래스의 예외 객체 참조값을 입력합니다. 이 때 JVM에서 보내는 예외 객체의 값과 catch문에 선언한 예외가 다르면 예외처리가 이루어지지 않습니다. 이 부분은 아래 예제②에서 확인 가능합니다.

 

예외 처리를 하는 예제를 만들어 보았습니다.

 

예제①

public class Dentistry{

    public static void main(String args[]) {                                
        String[] reserv = new String[5];        
        int pssble = 0; 
        int cnt = 0;
        
        reserv[0] = "차주혁";
        reserv[1] = "서우진";
        reserv[2] = "윤종후";
        reserv[3] = "이혜원";
        reserv[4] = "차주은";
        System.out.println("예약현황");
        for(int i=0; i<reserv.length; i++){
            System.out.println(reserv[i]);
            cnt = cnt + 1;
        }
        pssble = reserv.length - cnt;
        System.out.println("예약가능 인원 : " + pssble);
        try {
            reserv[5] = "이승현";          
        } catch (ArrayIndexOutOfBoundsException e) {
            // TODO: handle exception
            System.out.println("이번주 예약이 꽉 찼습니다.");
        } finally {
            System.out.println("예약종료");
        }
    }
}
 

치과 예약을 빗대었는데 배열 reserv는 총 5개의 인덱스로 구성되어 있습니다. 그리고 배열의 자리는 이미 꽉 차있는 상황.

즉, 예약이 꽉 찬 상황입니다. 이 때 예외 상황을 만들어 보았습니다. 6번째 인덱스에 새로운 사람을 더 입력하려 합니다.

실행하면 아래와 같은 결과를 확인할 수 있습니다.

 

예제②

만약 위와 같은 상황에서 catch 블록에 NullPointerException을 입력을 하는 경우

이와 같이 에러가 떨어진다. 때문에 catch 블록에 발생할 예외를 정확히 입력해주어야 한다.


+ 피드백은 언제나 환영입니다 :)

 

http://www.nextree.co.kr/p3239/

좋은 글 공유를 하고 싶어 링크를 가져왔습니다.

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.