Почему это дает исключение в «главном» java.lang.NullPointerException - PullRequest
0 голосов
/ 27 января 2012

Я получаю NullPointerException.Вот и все, кто-нибудь может понять, почему?

class one{
    String name;
}

class oneTestDrive{
    public static void main(String[] args){
        one[] obj = new one[2];

        obj[0].name = "IBM";
        obj[1].name = "AGM";

        System.out.println(obj[0].name);
        System.out.println(obj[1].name);

    }
}

Ответы [ 5 ]

6 голосов
/ 27 января 2012
one[] obj = new one[2];

Это создает пространство для двух one объектов, но фактически не создает их!

Сделайте это так:

one[] obj = new one[2];
obj[0] = new one();
obj[1] = new one();
obj[0].name = "IBM";
obj[1].name = "AGM";

Кстати, согласно JavaВ соглашениях об именах языков класс one должен быть в верхнем регистре.

И пока мы на нем, я бы дал вашему классу One конструктор:

class One{
    String name;

    public One(String name){
        this.name = name;
    }
}

И теперь вы можете создать весь массив в одну строку:

One[] obj = new One[]{new One("IBM"),new One("AGM")};

(затем я сделаю поле name закрытым, добавлю метод получения и т. Д. И т. Д.)

0 голосов
/ 27 января 2012

Когда в Java создается массив объектов, каждый элемент инициализируется нулем. Вы должны инициализировать каждый элемент самостоятельно. Пример:

one[] obj = new one[2];
for(int i = 0; i < obj.length; i++)
{
  obj[i] = new one();
}
0 голосов
/ 27 января 2012
one[] obj = new one[2];

Вышеуказанный оператор просто создает тип One [] с размером 2, но он не содержит какого-либо объекта One

Сначала вам нужно создать объект для этого местоположения, затем только вы можете установить имя.

   One temp = new One();
temp.name = "IBM";
        obj[0] = temp;
0 голосов
/ 27 января 2012

В этой строке

one[] obj = new one[2];

вы создаете массив с двумя элементами, но эти элементы являются ссылками, а не объектами типа one. Вы вообще никогда не создаете экземпляров one. Вы можете сделать это так:

obj[0] = new one();

Только после того, как вы создадите эти экземпляры, вы можете назначить значения их полям, как здесь:

obj[0].name = "IBM";

Перед тем, как назначить ссылку на obj[0], она равна null.

0 голосов
/ 27 января 2012

вам нужно использовать new для создания one экземпляров.В данный момент ваш массив не содержит никаких экземпляров, но вы пытаетесь установить свойство name для экземпляра.Когда вы делаете

obj[0].name

obj[0] равным нулю, и вы не можете получить свойство со значением NULL ....

Попробуйте что-то вроде ...

one one1 = new one();
one1.name = "IBM"
obj[0] = one1;

Кстати, имена классов в java должны быть правильно верблюжьими ... .... 1015 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...