2010-03-24 9 views

답변

8

예외 발생 여부에 관계없이 항상 실행해야하는 코드가 있습니다.

예를 들어 파일을 연 경우 finally 블록에서 파일을 닫아서 파일이 항상 닫혀 있는지 확인해야합니다. try 블록에서 닫은 경우 이전 예외로 인해 실행이 catch 블록으로 바로 이동하고 파일 닫기를 건너 뜁니다.

자세한 내용은 Java tutorials을 참조하십시오.

3

catch 블록에 들어가도 상관없이 실행됩니다. 이는 개체를 처리하고 다른 정리 작업을 수행하기에 좋은 장소임을 의미합니다.

4

finally 블록은 예외가 발생했는지 여부에 관계없이 항상 실행됩니다. 내가 생각할 수있는 고전적인 사용 예는 파일을 닫는 것이다.

FileOutputStream stream = null; 
try{ 
    // do stuff with the stream here 
} catch (IOException ex){ 
    // handle exception 
} finally{ 
    // always close the stream 
    if(stream != null){ 
     stream.close(); 
    } 
} 
+0

저는 실제로 stream.close() 자체가 예외를 throw하기 때문에 실제로는 작동하지 않는다는 것을 깨달았습니다! 자바 예외를 싫어하는 또 다른 이유. 이 예제는 여전히 일반적인 사용 패턴을 보여 주어야하므로, 나는 그것을 남겨 둘 것이다. – TwentyMiles

+1

코드를 배열하는 더 좋은 방법은 다음과 같습니다.'acquire(); {use(); } finally {release(); }'. –

2

나는 그것을 코드 블록에 여러 개의 리턴 문이있을 때 같은 '가까운 자원'코드를 복제 할 필요가 없기 때문에 많은 청소기 코드를 제작, 공개 자원을 청소 많이 사용 모든 return 문 앞에. try 섹션 내에서 리턴을하더라도 코드가 finally 섹션을 호출한다는 것은 확실합니다. 또한 프로그래머가 우연히 쉽게 코드를 남길 수 있기 때문에 코드 보안에 도움이됩니다. 당신이 당신의 try 또는 catch 블록에서뿐만 아니라 finally 블록에서 값을 반환하는 경우

0

finally 블록의 반환 값은 당신이 (실행 된 마지막 블록)하게 될 겁니다 무엇 있음을 유의하십시오. 즉, try 코드가 Exception을 던지지 않고 값을 반환한다고 가정하지만 finally 블록도 값을 반환한다고 가정하면 finally 블록 값이 실제로 반환됩니다. 그 바로 그 점에 관해 This SO thread가 말한다. 나는 보통 try 또는 catch 안에 값을 반환하는 것이 좋다고 생각하지 않습니다. 또한 System.exit(0)은 JVM을 죽이기 때문에 실행되기 전에 실행이 중지되므로 finally 블록이 실행되지 않을 수도 있습니다.

0

finally 블록은 주로 con.close과 같은 닫기 문을 수행하는 데 주로 사용되며 데이터베이스에서 연결을 닫습니다 .... try 블록은 항상 catch 블록 또는 finally (또는 둘 다)로 항상 이어집니다. 일단 try 블록에 입력했다면 finally 블록은 finally 블록의 시스템 오류, 예외를 제외하고는 절대 실행됩니다. finally 블록의 주 요점은 예외가 처리 되더라도 항상 실행된다는 것입니다.

0

finally 키워드는 finally 블록에있는 코드가 예외 상황과 관계없이 모든 상황에서 실행되어야 함을 확인하기 위해 사용됩니다. 예를 들어 대한

:

try{ 
    } 
    catch(Exception e){ 
    } 
     finally{ 
      System.out.print("finally executed"); 
      } 

참고 : 위의 경우에 마지막으로 항상 실행됩니다.

0

예외 또는 일부 잘못된 코드로 인해 중단이 발생했는지 또는 try에서 프로그램 제어 흐름을 반환하는지 여부에 관계없이 모든 조건에서 일부 코드를 실행하는 데 블록이 필요하다는 많은 답변이 있지만 블록, 여기에 내가 블록 finally의 필요성을 설명하는 예제를 추가하고있다;

친구 인 you have borrowed a pen을 가정 해 보겠습니다. 너는 그것을 사용하고 돌아온다. 나는 너를 신사라고 생각한다. 이제 무슨 일이 있어도 펜을 돌려 주어야합니다. 다양한 상황에 대응할 수 있으며, 불가피한 상황은 finally 블록에 놓습니다.

//Borrow the pen 
try{ 
    //Use the pen 
}catch(StolenPen how){ 
    //Buy new pen 
}catch(InkFinished how){ 
    //Refill the pen 
}catch(SomethingWrong how){ 
    //Buy new pen 
}finally{ 
    //Return new pen 
}