백앤드/JAVA

[JAVA] final, finally, finalize()

영최 2024. 10. 18. 13:50
728x90

1. [final 키워드는 변경 불가능하게 한다]

적용 대상 효과
기본형 변수(Primitive) 해당 변수 값 변경 불가
참조형 변수(Reference) *참조 변수가 힙 내 다른 객체를 가르키도록 변경 불가
메서드 해당 메서드 오버라이드 불가
클래스 해당 클래스 상속 불가

 

*참조 변수가 힙 내 다른 객체를 가르키도록 변경 불가
public class FinalExample {
    public static void main(String[] args) {
        final StringBuilder sb = new StringBuilder("Hello");
        sb.append(" World");  // 객체의 상태는 변경 가능 (문자열 추가)
        
        // sb = new StringBuilder("New Object");  // 오류 발생: 참조 변수는 다른 객체를 가리킬 수 없음
    }
}​

2. [finally 키워드는 try/catch 블록이 종료될 때 항상 실행될 코드 블록을 정의한다]

  • finally는 선택적으로 try 혹은 catch 블록 뒤에 정의할 때 사용한다.
  • finally 블록은 예외가 발생해도 항상 실행된다. (단, JVM이 try 블록 실행 중 종료되는 경우 제외)
  • finally 블록은 종종 뒷마무리 코드를 작성하는 데 사용된다.
  • finally 블록은 try와 catch 블록 다음과, 통제권이 이전으로 다시 돌아가기 전 사이에 실행된다.
예시
public class FinallyExample {
    public static void main(String[] args) {
        try {
            int result = 10 / 0;  // 예외 발생 (ArithmeticException)
        } catch (ArithmeticException e) {
            System.out.println("Catch block: Division by zero error.");
        } finally {
            System.out.println("Finally block: This will always be executed.");
        }
    }
}​

 


3. [finalize() 메서드는 GC가 더이상 참조하지 않는 객체를 메모리에서 삭제할때 호출된다]

  • Object 클래스의 finalize()메서드를 오버라이드해서 맞춤별 GC를 정의할 수 있다.
protected void finalize() throws Throwable { // 파일 닫기, 자원 반환 등등 }
728x90