0
public class TestDogs {

    public static void main(String [] args) {

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

class Dog{ }
Madhawa Priyashantha
  • 9,633
  • 7
  • 33
  • 60

2 Answers2

3

theDogs[2] array is null, since you didn't initialize it. Even it you initialized it, theDogs[2][0] would still be null, so calling toString on it would still throw NullPointerException.

Example how to initialize the array and the Dog instance :

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]
Eran
  • 387,369
  • 54
  • 702
  • 768
  • How is "Dog [][] theDogs = new Dog[3][];" different from "Dog theDogs = new Dog();"? –  Jun 09 '15 at 07:50
  • @arjunhegde The first initializes an array that can contain Dog[] references (i.e. arrays of Dog). Each element in the array is initialized to null. The second creates a single instance of the Dog class. – Eran Jun 09 '15 at 07:52
0

new Dog[3][]; creates a new array to hold Dog[] instances. You will have to add Dog[] instances to it.

theDogs[2][0] will give you NPE. Actually, theDogs[2] is not initialized, so this will give you NPE even before you proceed to theDogs[2][0].

TheLostMind
  • 35,966
  • 12
  • 68
  • 104
  • No, `new Dog[3][]` creates a new array to hold references to `Dog[]` instances (i.e. arrays). It's `theDogs[2]` which is null here - it doesn't get as far as a null `Dog` reference. – Jon Skeet Jun 09 '15 at 06:27
  • How is "Dog [][] theDogs = new Dog[3][];" different from "Dog theDogs = new Dog();"? –  Jun 09 '15 at 07:49