네, 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