2013-05-15 7 views
1
오늘 조금 문제로 실행

...자바에서 try-finally를 사용하는 것이 좋습니다. 이러한 구현은 예외의 측면에서 좋은 방법이 있다면 나에게 약간의 불편을 만들어 같은 코드의 조각을 가지고

try{ 
     //stuff... 
    } finally { 
     //finally stuff 
    } 

이 궁금해 try에서 발생하고 처리하는 발신자에게 다시 던졌습니다. 아래 코드와 동일합니까?

try{ 
     //code.... 
    } catch (Exception e) { 
     //handling... 
    } finally { 
     //finishing up 
    } 
+0

중복 (http://stackoverflow.com/questions/2854910/difference-between-try-finally-and-try-catch) – NullPointerException

+1

내가 하나 보았다 HTTP : //stackoverflow.com/questions/2854910/difference-between-try-finally-and-try-catch하지만 여전히 혼란 스러웠습니다 ... 어쩌면 – lrl

답변

4

이미 제공 한 이유 때문에 이와 같지 않습니다. 예외는 여전히 첫 번째 경우에 발생합니다. 그리고 그러한 행동을 정확히 원하는 곳에는 이유가있을 수 있습니다. finally 블록의 스트림을 처리하지만 예외를 처리 할 방향에서 예외를 throw합니다. .

, BTW 당신은 ​​또한 try "학대"수 - finally 구조는 경우도 예외는 전혀 예상하지 :

private StringBuilder buffer = new StringBuilder(); 

private String getBuffer() { 
    try { 
      // return current String content of the buffer 
      return buffer.toString(); 
    } finally { 
      // assign a new StringBuilder, before method returns 
      buffer = new StringBuilder(); 
    } 
} 
+0

감사합니다, 내 경우에는 당신이 묘사 한대로 '남용'입니다. . 그런데 좋은 예가 ... – lrl

2

정확하지 않게, catch없는 try/finally 블록이

try { 
    // ... 
} catch (Exception e) { 
    throw; 
} finally { 
    // finishing up 
} 
에 해당이

방금 ​​처리하지 않고 예외를 다시 throw합니다. catch 블록을 생략하면 이것이 의도 한 것이므로 코드 가독성이 향상됩니다. [마지막 시도 - 시도 - 캐치의 차이]의