2013-10-12 87 views
0

我想创建静态数组这是我后来初始化方法问题静态一维数组二维数组

像这样的事情

static Object[][] table; 
static Object[] codeZero; 
static Object[] codeOne; 

我打电话从主

static void init(){ 
    table = new Object[][]{codeZero,codeOne}; 
} 
这种方法

然后在另一种方法,我尝试这样的事情

codeZero=new Object[2]; 
codeOne=new Object[2]; 
table[0][0]= new Integer(4); 

当我尝试打印表[0] [0]它给了我一个空指针异常

+0

您可以包括您所用打印的代码:然后,用你目前的做法初始化table? –

+1

@DavidWallace问题似乎是,OP使用codeZero和codeOne变量的默认'null'值实例化数组,然后重新分配这些字段,但是table(或者'hashTable')变量仍然被填充'{null,null}'。 –

+0

对不起我的错..我编辑它 – sohil

回答

3

这是什么hapenning

  1. 实例化table变量,null元素:

    table = new Object[][] { codeZero, codeOne }; 
    
  2. 更改codeZerocodeOne变量的引用,旧引用仍然会仍然在table,他们将不会被取代。

    codeZero = new Object[2]; 
    codeOne = new Object[2]; 
    
  3. 由于旧null引用仍然在table,你会打电话table[0][<whatever>]时收到NullPointerException

可能的解决办法:初始化table前初始化codeZerocodeOne

codeZero = new Object[2]; 
    codeOne = new Object[2]; 
    table = new Object[][] { codeZero, codeOne } 
+0

有道理......谢谢! – sohil

+0

所以当我在我的主要方法打印codeZero [0]它应该给我的对象,因为它被初始化? – sohil

+0

@sohil是的,它会。 –