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();
}
'개발 및 관리 > Java' 카테고리의 다른 글
순탄지 않았던 그 동안의 이야기 (0) | 2013.01.23 |
---|---|
Exception에 관련된 규칙 (0) | 2013.01.22 |
MathFun.java - parseInt, substring, relpalce (nullChar를 ""으로 바꿈 ) (0) | 2013.01.22 |
자바 숫자 Formatting - 화폐, 숫자, 날짜 (0) | 2013.01.22 |
Math 메소드 (0) | 2013.01.22 |