Exception

개발 및 관리/Java 2013. 1. 22. 19:45 posted by HighLighter
반응형

 

 

 

 

 TestExceptions.java

 

1) String test = "예"

 

 

2) String test = "아니요"

 

 

 

1. 다형적인 catch 블록 하나로 모든 예외를 잡을 수 있다고 해서 꼭 그렇게 해야 하는 것은 아니다.

 

try {

laundry.doLaunry();

}     catch(Exception ex) {

      //복구 코드

}

 

2. 따로 처리해야 하는 예외에 대해서는 별도의 catch 블록을 만든다.

 

try {

  laundry.doLaundry();

} catch (TeeShirtException tex) {

     //TeeShirtException 처리

} catch (LingerieException lex) {

     //LingerieException 처리

} catch (ClothingException cex) {

     //기타 모든 ClothingException 처리

}

 

3. 예외 발생 여부와 상관없이 무조건 실행할 코드는 finally 블록에 넣으면 된다.
   try 또는 catch 블록에 return 선언문이 있어도 finally 블록은 실행된다. 일단 흐름 제어가 finally 블록으로 넘어갔다가 리턴된다.


 1) Good Code

 try {
   trunOvenOn();
   x.bake();
 } catch (BakingException ex) {
   ex.printStackTrace();
 } finally {
   turnOvenOff();
 }


 2) Bad Code 
 try {
   trunOvenOn();
   x.bake();
   turnOvenOff();
 } catch (BakingException ex) {
   ex.printStackTrace();
   turnOvenOff();
 }

 

4. 테스트 과정을 제외하면 Exception에 대한 catch 블록을 만드는 일은 거의 없을 것이다.

 

-----------------------------------------------------------------------------------------

 

Exception은 처리하거나 선언하거나 해야 한다.


1. 처리하기 - 위험한 메소드를 호출하는 선언문을 try/catch 구조로 감싼다.
try {
  laundry.doLaundry();
} catch { ClothingException cex) { 

                         //doLaundry()에서 던질 수 있는 모든 예외를 처리할 수 있는 catch 블록이어야 한다.
                         //그렇게 하지 않으면 컴파일어에서 모든 예외를 잡아내지 못한다는 에러 메세지를 얻는다.
                         //예외 처리
}

 

2. 선언하기(회피하기) - 메소드에서 호출하는 위험한 메소드와 똑같은 예외를 던진다고 선언한다.
void foo() throws ClothingException { 

                         //doLaundry()메소드에서는 ClothingException을 던지지만 그 예외를 선언함으로써
                         //foo() 메소드에서는 그 예외를 회피할 수 있다. try/catch를 사용하지 않아도 된다.
                         laundry.doLaundry();
}

반응형