섀도잉이 필드 초기화를 방해하는 이유
클래스에 생성자에서 초기화하려고 하는 용량 및 요소라는 필드가 있습니다. 하지만 생성 중에 설정한 값은 필드 값을 쿼리할 때 반영되지 않습니다. 이 동작은 섀도잉이라는 개념에서 비롯됩니다.
섀도잉은 두 변수가 동일한 이름을 공유하지만 서로 다른 범위 내에 존재할 때 발생합니다. 생성자에서 용량 및 요소라는 이름의 지역 변수를 선언합니다. 이러한 로컬 변수는 생성자 범위 내의 해당 필드보다 우선하여 효과적으로 섀도잉됩니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!