source

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

goodcode 2022. 12. 25. 11:15
반응형

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생성자의 코드가 실행되기 전.

이는 컨스트럭터에서 Atribute와 같은 이름의 로컬 변수를 선언했기 때문입니다.

모든 요소가 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필드를 숨기는 로컬 변수에 대해 결론을 내릴 수 있도록 전체 코드를 게시하십시오.

언급URL : https://stackoverflow.com/questions/8068470/java-initialize-an-int-array-in-a-constructor

반응형