Java 생성자의 필드 초기화에 대한 혼란
개발자는 클래스 생성자에서 선언되고 초기화된 필드가 null 또는 기본값을 반환하는 상황에 직면할 수 있습니다. 질문했다. 이 동작은 Java의 섀도잉 개념에서 비롯됩니다.
로컬 변수를 사용한 섀도우
로컬 변수가 생성자 내에서 선언되면 해당 변수는 다음을 소유합니다. 인스턴스 변수와 동일한 이름입니다. 그러나 Java는 해당 범위 내에서 로컬 변수의 우선순위를 지정하여 인스턴스 변수를 무색하게 합니다. 다음 예를 고려하십시오.
public class Sample { private String[] elements; private int capacity; public Sample() { int capacity = 10; String[] elements; elements = new String[capacity]; } }
이 생성자에서 지역 변수 용량은 10으로 초기화되지만 인스턴스 변수 용량은 초기화되지 않은 상태로 유지되어 기본값이 0이 됩니다. 마찬가지로 지역 변수 요소는 다음과 같습니다. 배열 참조를 할당했지만 인스턴스 변수 요소는 null로 유지됩니다.
생성자로 그림자 만들기 매개변수
생성자 매개변수는 동일한 이름을 가진 인스턴스 변수를 숨길 수도 있습니다. 매개변수의 선언이 우선하므로 인스턴스 변수에 직접 액세스할 수 없습니다. 인스턴스 변수를 참조하려면 다음과 같이 이 기본 표현식과 함께 정규화된 이름을 사용하십시오.
public Sample(int capacity) { this.capacity = capacity; }
권장 사항
혼동을 피하려면 모범 사례입니다. 가능하면 지역 변수, 생성자 매개변수 및 인스턴스 변수에 고유한 이름을 사용합니다. 이렇게 하면 실수로 인한 섀도잉을 방지하고 필드가 의도한 대로 초기화되도록 할 수 있습니다.
위 내용은 내 Java 생성자 필드가 Null 또는 기본값을 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!