블로그 이미지
두번째 블로그, 조금은 개인적인 공간;ㅅ;
메시에

태그목록

공지사항

최근에 달린 댓글

글 보관함

calendar

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

Exceptrion이란?

 : Detect & Handling이 가능한 Error.

 : Error != Exception. Exception은 Error의 부분집합.

 

A ---> B  ::  B가 Exception을 확인

B ---> A  ::  신호 'e' 를 보내줌

A  ::  예외를 적절하게 처리

 

 

예외 처리 방법?

 : 프로그램을 종료 or 복구.

 : 에러 메시지 출력, 해당 플로우 스킵 등.

 

 

Java에서의 예외 처리 방법

- try / catch 문

 : try 안의 내용을 실행하다가, 예외가 발생하면 catch로 넘어가 예외 처리

 : DETECT and HANDLE.

 

cf) finally : try / catch와 함께 사용되어, 예외가 발생하든 안하든 항상 실행되는 코드 영역

 

- throws

 : 메서드 옆에 붙임 -> 메서드가 실행 중 예외가 발생하면 에러 띄우고 종료

 : 예외 상황을 '처리' 하지는 못함, just DETECT.

 : 얘가 예외가 발생했음을 알려주면 try / catch 문에서 처리하는 방법 등을 사용

 

- throw e;

 : 예외가 발생했음을 알려줘서 예외 처리 부분으로 이동

 : throws가 붙은 메서드 안에 사용되어, main에 예외 e를 던져줌 -> main에서 핸들링 등

 

    try{
        if(check[i-1] == 1)
             throw new LoopException();            // 예외가 발생한 경우
        check[i-1] = 1;
        i = Integer.valueOf(arr.get(i-1));
        continue;
    }catch(LoopException ee){                       // 여기로 이동.
         ps.println(ee.getMessage());
         break;
    }

 

 

* Pre-Defined Exceptions & User-Defined Exceptions

- 이미 정의되어 있는 예외들 (Bulit-In)

 : Exception (최상위 클래스), IOException, NumberException, IndexOutOfBoundsException

   ...

 

- 유저 정의 예외처리

 : Exception 클래스의 서브클래스로 정의

 

class LoopException extends Exception{
 public LoopException()
 {
  super("LOOP");                            // ee.getMessage에 의해 LOOP를 출력
 }
}

 

 

* try / catch Block의 사용 순서

 : 더 범위가 작은 것부터 먼저 처리하도록 설계

 : 반대로 설계하면 Dead Code (절대 플로우가 닿지 않는 쓸모없는 코드) 가 발생할 수 있음

 

try{

...

}catch (TooSmallException e){      

  ...

}catch (NumberException e){

  ...

}

 

// TooSmallException이 NumberException의 서브클래스이기 때문에,

    NumberException이 위에 있으면 크던 작던 얘가 다 처리해버림.

 

 

이전 1 2 3 다음