2015-06-09 5 views
0
public class TestDogs { 

    public static void main(String [] args) { 

     Dog [][] theDogs = new Dog[3][]; 
     System.out.println(theDogs[2][0].toString()); 
    } 
} 

class Dog{ } 
+0

[2D-массивы] (http://www.willamette.edu/~gorr/classes/cs231/lectures/chapter9/arrays2d.htm) –

ответ

3

theDogs[2] массив имеет значение null, так как вы его не инициализировали. Даже это вы его инициализировали, theDogs[2][0] все равно было бы нулевым, поэтому при вызове toString на нем все равно будет стоять NullPointerException.

Пример как инициализировать массив и экземпляр собаки:

Dog [][] theDogs = new Dog[3][]; 
theDogs[2] = new Dog[7]; // initialize the 3rd row of theDogs 2D array 
theDogs[2][0] = new Dog(); // initialize the Dog instance at the 1st column of the 3rd row 
System.out.println(theDogs[2][0].toString()); // now you can execute methods of theDogs[2][0] 
+0

Как «Собака [] [] theDogs = new Dog [3] [ ];» отличается от «Dog theDogs = new Dog();»? –

+0

@arjunhegde Первый инициализирует массив, который может содержать ссылки Dog [] (т. Е. Массивы Dog). Каждый элемент массива инициализируется нулем. Второй создает один экземпляр класса Dog. – Eran

0

new Dog[3][]; создает новый массив для хранения Dog[] экземпляров. Вам нужно будет добавить Dog[] экземпляров.

theDogs[2][0] предоставит вам NPE. На самом деле, theDogs[2] не инициализирован, поэтому это даст вам NPE даже до перехода на theDogs[2][0].

+0

Нет, 'new Dog [3] []' создает новый массив для хранения ссылок на 'Dog []' экземпляры (т. Е. Массивы). Это 'theDogs [2]', который здесь null, - он не доходит до нулевой ссылки «Собака». –

+0

Как «Собака [] [] theDogs = new Dog [3] [];" отличается от «Dog theDogs = new Dog();»? –

Смежные вопросы