2010-08-14 3 views
13

나는 객체 지향 프로그래밍에서 내 시험을 위해 공부하고있는 경우 다음 코드 고려하는 것이 무엇 때문에 과거의 어떤 사건을 궁금 :try finally 블록에서 finally가 실행되지 않을 때 이러한 경우가 있습니까?

try { 
    do something 
} catch (someException e) { 

} finally { 
    do something 
} 

finally 블록이 실행되지 않습니다를?

+13

플러그를 잡아 당겨야합니다. – PreciousBodilyFluids

+5

http://thedailywtf.com/Articles/My-Tales.aspx –

답변

17

예. Java VM을 크래쉬하거나 네이티브 코드를 통해 문제가 생기면 프로그램을 종료 시키거나 try 블록 내에서 무한 루프/대기시킵니다.

finally 블록 실행을 피하는 유일한 경우는 3 가지입니다.

+3

System.exit을 호출하거나 컴퓨터를 돌리면 "프로그램이 종료됩니다"... :-) –

+0

@Rasmus Kaj : 동의합니다. – Borealid

+0

try 블록에서이 try/catch/finally 구문을 포함하는 함수에서 돌아온 경우 finally 블록이 여전히 실행됩니까? – euphoria83

5

trySystem.exit(0)으로 전화하면 또는 JVM을 종료하거나 중단시키는 (교착 상태와 같은) 무언가를 만드십시오. 그렇지 않으면 - 아니오.

+0

JNI는 아마도 그렇게 할 수 있습니다. –

2

마지막으로 try-statement가 완료되기 전에 호출되는 Java 언어 사양 guarantees.

은 try 문은 Borealid의 대답에 열거 된 일반적인 이유로 완료되지 않을 수 있습니다.

+1

"try-statement가 완료되기 전에 finally가 호출됩니다."??? "before"은 "when"이 아니어야합니다. –

+2

try- * 문의 *는 try- * 블록 *, 모든 catch 블록 및 선택적으로 finally 블록으로 구성됩니다. – meriton

0

컨트롤이 try 또는 catch 블록에서 나온 경우 finally 블록이 실행됩니다. 당신이 어떤 방법이 블록에서 오는 제어를 중지 관리하는 경우 :

  • 출구 문을 작성하여, 또는

  • 무한 루프 등

다음 마지막으로 의지를 차단 처형되지 않습니다. 일반적으로 "정리"목적의 finally 블록을 작성합니다.

관련 문제