>Java >java지도 시간 >내 생성자에서 내 필드 값이 올바르게 초기화되지 않는 이유는 무엇입니까?

내 생성자에서 내 필드 값이 올바르게 초기화되지 않는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-02 19:11:12642검색

Why Are My Field Values Not Initialized Correctly in My Constructor?

섀도잉이 필드 초기화를 방해하는 이유

클래스에 생성자에서 초기화하려고 하는 용량 및 요소라는 필드가 있습니다. 하지만 생성 중에 설정한 값은 필드 값을 쿼리할 때 반영되지 않습니다. 이 동작은 섀도잉이라는 개념에서 비롯됩니다.

섀도잉은 두 변수가 동일한 이름을 공유하지만 서로 다른 범위 내에 존재할 때 발생합니다. 생성자에서 용량 및 요소라는 이름의 지역 변수를 선언합니다. 이러한 로컬 변수는 생성자 범위 내의 해당 필드보다 우선하여 효과적으로 섀도잉됩니다.

public StringArray() {
    int capacity = 10; // Local variable shadows field
    String[] elements; // Local variable declaration without initializer
    elements = new String[capacity]; // Initializes local variable, not field
}

결과적으로 로컬 용량 변수에 할당하면 필드가 아닌 해당 변수가 초기화됩니다. 마찬가지로 요소 변수를 초기화하더라도 지역 변수가 우선순위를 가지므로 해당 할당은 필드에 영향을 주지 않습니다. 따라서 필드 용량은 기본값(0)으로 유지되고 요소는 null로 설정됩니다.

이 문제를 해결하려면 생성자에서 지역 변수 선언을 제거하여 이름 용량 및 요소가 인스턴스 변수.

public StringArray() {
    // Remove local variable declarations
    this.capacity = 10;
    this.elements = new String[capacity];
}

또는 생성자 매개변수를 유지해야 하는 경우 정규화된 이름을 사용하여 인스턴스 변수를 명시적으로 참조합니다.

public StringArray(int capacity) {
    this.capacity = capacity; // Initializes the field using qualified name
}

위 내용은 내 생성자에서 내 필드 값이 올바르게 초기화되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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