네, finally 블록은 JVM 크래시나 System.exit() 호출로 인해 비정상적인 프로그램 종료가 발생하지 않는 한 항상 실행됩니다.
- finally 블록은 예외가 발생했는지 여부에 관계없이 항상 실행됩니다.
- 파일 또는 DB 연결 종료와 같은 예외가 발생하면 finally 블록을 사용하여 코드를 정리합니다.
- 최종 블록이 항상 실행된다고 말할 수는 없습니다. System.exit()와 같은 명령문이나 유사한 코드가 try 블록에 작성되면 프로그램이 자동으로 종료되고 이 경우 finally 블록이 실행되지 않기 때문입니다.리>
- Try 블록의 정전 및 교착 상태로 인해 시스템이 종료될 때 작업 관리자 또는 콘솔에서 Java 프로세스가 강제 종료될 때 JVM이 메모리 부족으로 인해 finally 블록이 실행되지 않습니다.리>
예시 1
public class FinallyBlock {
public static void main(String args[]){
try {
int a=10,b=30;
int c = b/a;
System.out.println(c);
} catch(ArithmeticException ae){
System.out.println(ae);
} finally {
System.out.println("finally block is always executed");
}
}
} 위의 예에서 finally 블록은 예외가 발생했는지 여부에 관계없이 항상 실행됩니다.
출력
3 finally block is always executed
예시 2
public class FinallyBlock {
public static void main(String args[]) {
try {
System.out.println("I am in try block");
System.exit(1);
} catch(Exception ex){
ex.printStackTrace();
} finally {
System.out.println("I am in finally block");
}
}
} 위의 예에서 finally 블록은 try 블록의 System.exit(1) 조건으로 인해 실행되지 않습니다.
출력
I am in try block