what it means is , i is refering to a one dimensional array ( size 2 ) of int array reference variable & that array reference is refering to a one dimentional array ( size 1 ) of int primitive variable .
So in your case , you have specified that a2 is refering to a one dimensional array ( size 3 ) of long array reference variable and this all long reference variable are refereing to an array of long primitive but what is the size of this array ??
hope it is clear . [ March 21, 2005: Message edited by: rathi ji ]
Array construction in line 7 is not fully qualified.
line 7: int a=new int ; In above stmt, length of the deeply nested array is omitted. Hence this is left unconstructed. So, when u access the element a in your code, the compile throw run-time exception, NullPointerException.
Replace line 7 with int a=new int , the code works fine.
I actually agree with Balasubramani Dharmalingam, because when declaring/constructing arrays it is not necessary to also define the length of the second dimension in an array (for ex: int  a2 = new int  .
Both your arrays are local (a1 doesnt really matter since you are not using it anywhere) and for local variables, it is necessary that you initialize it to something (be it null!! too, doesnt matter). I think that is the reason for the error.
Sabeer's solution works, but according to me that is not the actual reason for the error.
More feedback welcome!
-Kinjal [ March 21, 2005: Message edited by: kiennjal shah ]