[java] Java 생성자에서 int 배열 초기화

나는 수업이 있고 그 수업에는 다음이 있습니다.

 //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! 필드를 숨기는 지역 변수와 관련하여 결론에 도달 할 수 있도록 전체 코드를 게시하십시오.


답변