Могут ли массивы объектов Java инициализировать элементы как ненулевые значения?

#java

#java

Вопрос:

Я довольно новичок в Java, и мне трудно понять, как исправить это исключение нулевого указателя, которое меня беспокоит.

Я знаю, где возникает проблема, и я знаю, что такое исключение нулевого указателя, но я понятия не имею, как я собираюсь заставить свою программу работать.

Вот фрагмент кода, в котором возникает проблема:

 public static void main(String[] args) {
 Scanner input = new Scanner(System.in);

    Account[] atm = new Account[10];

    for (int i = 0; i < 10; i  ){
        atm[i].setId(i);
        atm[i].setBalance(100.00);
    }
  

Как я уже сказал, я знаю, что это происходит потому, что объекты в atm[] имеют значение null, но я не уверен, как решить проблему.

Я уверен, что это какая-то глупая ошибка, потому что такие ошибки я совершаю регулярно, но любая помощь, которую вы, ребята, можете оказать, сделает мой день.

Спасибо!

Ответ №1:

Весь ваш массив равен нулю! помните, что массивы никогда не инициализируются автоматически в java, если только они не являются массивами целых чисел, чисел с плавающей запятой, двойных значений или логических значений.

 Scanner input = new Scanner//System.in.Scanner;

Account[] atm = new Account[10];

for (int i = 0; i < 10; i  ){
    **atm[i] = new Account();**
    atm[i].setId(i);
    atm[i].setBalance(100.00);
}
  

Когда вы объявляете массивы, содержащие объекты, читайте это как: «Я создаю массив, который будет содержать объекты ‘x'». (правильно), а затем приступить к созданию экземпляров этих объектов

…в отличие от…

«Я создаю массив с объектами ‘x’ в нем». (неверно), поскольку там еще нет никаких объектов, потому что они не были созданы.

Комментарии:

1. Или, возможно, лучший способ подумать об этом: массивы всегда инициализируются по умолчанию в Java, а инициализатор всегда эквивалентен 0-заполнению: 0, 0.0, false , и т.д. null

2. Большое вам спасибо! Это первая практика с Java-массивами, которая у меня была, я совершенно не знал об этом маленьком лакомом кусочке! Я не позволю этому повториться =)