почему Nullpointerexception? - PullRequest
       2

почему Nullpointerexception?

0 голосов
/ 02 октября 2011

Это сценарий:

class A{
int a;
}

class B{
A objectA[]=new A[10] ;
}

class C{
B ObjectB;
public static void main(String[] args){
ObjectB.ObjectA[0].a=1;
}
}

Я получаю нулевое исключение в основной операции.Однако, если я объявляю только один объект класса A, я не получаю ошибку.Почему так?Как мне исправить это?

Ответы [ 3 ]

5 голосов
/ 02 октября 2011

(1) B ObjectB; не создает новый экземпляр B, он просто создает переменную, чтобы создать экземпляр;B ObjectB = new B();

(2) Также A objectA[]=new A[10] ; выделяет массив, но не элементы в массиве, и ObjectB.ObjectA[0].a=1; также вызывает NPE.

1 голос
/ 02 октября 2011

вызов new B() инициализирует массив объектов типа A, но ни один из объектов-членов. Вы можете исправить его, сначала инициализируя objectB, а затем вызывая objectA[i] = new A() для каждого элемента в массиве.

class B{
    A objectA[]=new A[10] ;
    {
        for (int i = 0; i < 10; i++)
            objectA[i] = new A();
    }
}

class C{
B ObjectB = new B();
public static void main(String[] args){
ObjectB.ObjectA[0].a=1;
}
}
0 голосов
/ 18 мая 2017

Вы не инициализировали ObjectB. Нет памяти, выделенной для ObjectB. Отсюда показано исключение нулевого указателя (ничего не выделено для ссылки на ObjectB).

Это должно работать:

класс С { B ObjectB = новый B ();

public static void main(String[] args) {
    ObjectB.ObjectA[0].a = 1;
}

}

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