java数组调用问题

类中有一个静态成员变量(数组),此类中的某类方法a已经对其进行初始化和赋值。在main方法中先调用类方法a,再调用这个数组的时候却提示空指针异常。求解释。
代码如下:
class Ts{
public static int a[];

public static void Inita(){
int a[]=new int[3];
a[0]=1;
a[1]=2;
a[2]=3;
}

public static void main(String args[]){
Inita();
System.out.println(a[2]);
}
}
提示运行时异常:空指针异常。

建议你去看一看局部变量和全局变量的作用域,
你就可以发现
public static void Inita(){
int a[]=new int[3];
a[0]=1;
a[1]=2;
a[2]=3;
}
这里面的数组a是局部变量,和上面的static的a并非同一个数组,也就是说,你的static数组并没有初始化。理所当然出现空指针异常。追问

需要加this关键字是吗?

追答

int a[]=new int[3];
把这一句改成 a[]=new int[3];就ok了

追问

可是这样会编译错误

追答

讲错了,应该是改成a =new int[3];

追问

编译运行均通过……能否讲一下为什么不加方括号?

追答

因为这个是赋值,左边必须是变量名,加方括号就不对啦。、

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-19
你这是必然的啊,main函数里面打印出来的是静态数组里面的,但是你的inita方法里面创建的数组a却不是在操作静态数组a,你重新新建了局部变量追问

需要加this关键字是吗?

追答

对,加this就都是在操作静态变量了

第2个回答  2012-05-19
看代码吧, 重复定义数组造成

public static int a[];

public static void Inita(){
int a[]=new int[3];//这行前面的int删除
第3个回答  2012-05-21
public class Ts{
public static int a[];
public static void Inita(){
a=new int[3];
a[0]=1;
a[1]=2;
a[2]=3;
}

public static void main(String args[]){
Inita();
System.out.println(a[2]);
}
}
相似回答