나는 수업이 있고 그 수업에는 다음이 있습니다.
//some code
private int[] data = new int[3];
//some code
그런 다음 내 생성자에서 :
public Date(){
data[0] = 0;
data[1] = 0;
data[2] = 0;
}
이렇게하면 모든 것이 정상입니다. 기본 데이터 값이 초기화되지만 대신 이렇게하면 :
public Date(){
int[] data = {0,0,0};
}
그것은 말한다 :
Local variable hides a field
왜?
생성자 내부에서 배열을 초기화하는 가장 좋은 방법은 무엇입니까?
답변
private int[] data = new int[3];
이것은 이미 배열 요소를 0으로 초기화합니다. 생성자에서 다시 반복 할 필요가 없습니다.
생성자에서 다음과 같아야합니다.
data = new int[]{0, 0, 0};
답변
다음 중 하나를 수행 할 수 있습니다.
public class Data {
private int[] data;
public Data() {
data = new int[]{0, 0, 0};
}
}
data
생성자에서 초기화 되거나 :
public class Data {
private int[] data = new int[]{0, 0, 0};
public Data() {
// data already initialised
}
}
data
생성자의 코드가 실행되기 전에 초기화 됩니다.
답변
이는 생성자에서 속성과 동일한 이름을 가진 지역 변수를 선언했기 때문입니다.
모든 요소가 0으로 초기화되는 정수 배열을 할당하려면 생성자에 다음을 작성하십시오.
data = new int[3];
다른 초기 값을 가진 정수 배열을 할당하려면 다음 코드를 생성자에 넣으십시오.
int[] temp = {2, 3, 7};
data = temp;
또는:
data = new int[] {2, 3, 7};
답변
왜 단순히
public Date(){
data = new int[]{0,0,0};
}
오류가 발생한 이유 int[] data = ...
는 새 변수를 선언하고 필드를 숨기기 때문입니다.data
그러나 배열의 내용은 이미 0 (기본값 int
) 으로 초기화되어 있습니다.
답변
생성자에서 다른 int 배열을 만들고 있습니다.
public Date(){
int[] data = {0,0,0};
}
이 시도:
data = {0,0,0};
참고 : 그런데 인스턴스 변수로 선언 된 경우 배열 요소를 초기화 할 필요가 없습니다. 인스턴스 변수는 자동으로 기본값을 가져 오며 정수 배열의 경우 기본값은 모두 0입니다.
배열을 로컬로 선언 한 경우 각 요소를 초기화해야합니다.
답변
가장 좋은 방법은 초기화 문을 작성하지 않는 것입니다. 당신이 쓰는 경우 때문이다
int a[]=new int[3]
기본적으로 다음, 모든 배열 즉,의 값을 Java로는 a[0]
, a[1]
및 a[2]
초기화됩니다 0
! 필드를 숨기는 지역 변수와 관련하여 결론에 도달 할 수 있도록 전체 코드를 게시하십시오.