달력

11

« 2024/11 »

  • 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
2007. 4. 23. 10:43

try catch finally 사용시 주의해야 할 점! 그거/Java2007. 4. 23. 10:43

public class ThrowsTest {
 public static void main(String[] args){
  ThrowsTest tt = new ThrowsTest();
  tt.check();
  System.out.println("11");
 }

 String check() {
  try {
   Integer.parseInt("abc");
  } catch(Exception e) {
   throw e;
  } finally {
   return "";
  }
 }
}


위 소스를 보고 이상한점이 없는가?

check() 라는 method를 보면 catch block에서 exception을 throw 하는데

check method 선언부에서는 exception을 throws 하지 않고 있다.

즉, 컴파일 error가 발생해야 한다.

하지만!!!!!!

위 소스를 컴파일해보라... 놀랄것이다.

에러가 나지 않는다. 허허.. 이런 -_-;

check method를 잘 보면,

finally block에 return 문이 있다.

바로 이 finally block의 return 문이 catch block의 throw를 먹어버린것이다!

finally block의 return 문을 finally 밖으로 빼고 다시 컴파일 해보라..

컴파일 에러가 날것이다..

흔히들 try catch finally block을 함께 사용한다.

그리고, finally block은 무조건 실행되기 때문에 finally block에 return 문을 위치하는 경우가 종종있다.

이는 위험 천만한 발상인 것이다!

위 예에서처럼 try block에서 exception이 발생해서 catch block이 실행되어야 하는데

finally block에 return 문이 있으면 catch block의 exception을 먹어버려서

exception 발생을 감지하지 못하게 되는 것이다!!

무슨 일이 있어도..

finally block 안에 return 문은 넣지 말지어다!!!!!!!!

:
Posted by 뽀기