>Java >java지도 시간 >Java의 `final` 키워드가 객체 수정에 어떤 영향을 미칩니까?

Java의 `final` 키워드가 객체 수정에 어떤 영향을 미칩니까?

DDD
DDD원래의
2024-12-15 18:04:14433검색

How Does Java's `final` Keyword Affect Object Modification?

Java에서 "final" 키워드가 작동하는 방식(객체 수정)

Java에서 "final" 키워드는 불변 값을 갖는 변수를 선언하는 데 사용됩니다. 그러나 최종 변수에 할당된 개체를 계속 수정할 수 있는 시나리오가 발생할 수 있습니다. 이 동작을 수행하려면 final의 기능에 대한 더 깊은 이해가 필요합니다.

Variable Finality

인스턴스 변수:

  • Final 인스턴스 변수는 생성자입니다.
  • 한 번 초기화되면 다른 객체에 다시 할당할 수 없습니다. 참조.
  • 그러나 개체의 콘텐츠(예: 컬렉션인 경우)는 계속 수정할 수 있습니다.

정적 변수:

  • 최종 정적 변수는 클래스 선언에서 초기화되어야 합니다.
  • 생성자나 메서드에서 초기화할 수 없습니다.

다음 코드를 고려하세요.

import java.util.ArrayList;
import java.util.List;

class Test {
  private final List foo;

  public Test() {
      foo = new ArrayList();
      foo.add("foo"); // Modification-1
  }

  public static void main(String[] args) {
      Test t = new Test();
      t.foo.add("bar"); // Modification-2
      System.out.println("print - " + t.foo);
  }
}
  • 수정-1: 최종 인스턴스 변수 foo는 다음으로 초기화됩니다. 생성자의 새 ArrayList 객체.
  • 수정-2: add() 메서드는 허용되는 foo 목록의 내용을 수정하는 데 사용됩니다.

Java 1.8의 Effective Final

Java 1.8에서는 "Effective Final" 개념이 도입되었습니다. 변수. 이는 중첩 클래스 또는 익명 내부 클래스 내에서 효과적으로 변경할 수 없는 지역 변수입니다. "final" 키워드를 사용하지 않는 한 재할당할 수 없습니다.

하위 클래스화 및 재정의

  • 최종 클래스: 하위 클래스화할 수 없습니다.
  • 최종 방법: 재정의할 수 없습니다( 하위 클래스).
  • 슈퍼클래스의 최종 메서드: 하위 클래스에서 재정의될 수 있습니다.

위 내용은 Java의 `final` 키워드가 객체 수정에 어떤 영향을 미칩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.