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

Почему?

Каков наилучший способ инициализации массива внутри конструктора?

спасибо

Ответ 1

private int[] data = new int[3];

Это уже инициализирует элементы массива до 0. Вам не нужно повторять это снова в конструкторе.

В вашем конструкторе это должно быть:

data = new int[]{0, 0, 0};

Ответ 2

Вы можете либо сделать

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 до того, как будет выполнен код в конструкторе.

Ответ 3

почему бы не просто

public Date(){
    data = new int[]{0,0,0};
}

причина, по которой вы получили ошибку, состоит в том, что int[] data = ... объявляет новую переменную и скрывает поле data

однако следует отметить, что содержимое массива уже инициализировано до 0 (значение по умолчанию int)

Ответ 4

Это потому, что в конструкторе вы объявили локальную переменную с тем же именем, что и атрибут.

Чтобы выделить целочисленный массив, который все элементы инициализированы равным нулю, напишите это в конструкторе:

data = new int[3];

Чтобы выделить целочисленный массив, который имеет другие начальные значения, поместите этот код в конструктор:

int[] temp = {2, 3, 7};
data = temp;

или

data = new int[] {2, 3, 7};

Ответ 5

в вашем конструкторе вы создаете еще один массив int:

 public Date(){
  int[] data = {0,0,0};
  }

Попробуйте следующее:

 data = {0,0,0};

ПРИМЕЧАНИЕ. Кстати, вам НЕ нужно инициализировать элементы массива, если он объявлен как переменная экземпляра. Переменные экземпляра автоматически получают свои значения по умолчанию, которые для целочисленного массива значениями по умолчанию являются все нули.

Если у вас есть локально объявленный массив, хотя вам нужно будет инициализировать каждый элемент.

Ответ 6

Лучший способ - не писать какие-либо инициализирующие утверждения. Это потому, что если вы пишете int a[]=new int[3], то по умолчанию в Java все значения массива i.e. a[0], a[1] и a[2] инициализируются на 0! Что касается локальной переменной, скрывающей поле, отправьте весь свой код, чтобы мы пришли к выводу.