Установка размера массива с помощью конструктора [duplicate]

Примером этого исключаемого исключения является: Когда вы пытаетесь проверить что-то, это null.

Например:

string testString = null; //Because it doesn't have a value (i.e. it's null; "Length" cannot do what it needs to do)

if (testString.Length == 0) // Throws a nullreferenceexception
{
    //Do something
} 

Время выполнения .NET исключение NullReferenceException при попытке выполнить действие над чем-то, что не было инстанцировано, т.е. код выше.

По сравнению с ArgumentNullException, которое обычно выбрано как защитная мера, если метод ожидает, что то, что происходит

Дополнительная информация находится в C # NullReferenceException и Null Parameter .

67
задан Favolas 9 November 2011 в 18:50
поделиться

6 ответов

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

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

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

data = new int[]{0, 0, 0};
135
ответ дан Martijn Courteaux 25 August 2018 в 06:49
поделиться

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

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

Попробуйте это:

 data = {0,0,0};

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

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

0
ответ дан Mechkov 25 August 2018 в 06:49
поделиться

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

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 перед кодом в конструкторе выполняется.

6
ответ дан Oleksandr 25 August 2018 в 06:49
поделиться

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

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

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

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

4
ответ дан ratchet freak 25 August 2018 в 06:49
поделиться

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

0
ответ дан Samuel Liew 25 August 2018 в 06:49
поделиться

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

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

data = new int[3];

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

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

или:

data = new int[] {2, 3, 7};
4
ответ дан wannik 25 August 2018 в 06:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: