2016-10-02 33 views
0

我想加倍在非静态上下文通过以下方式数组:问题与变量初始化时的非静态

public class Test { 
    int[] data=new int[1]; 

    public void Double(){ 
     if(data == null){ 
      int[] data=new int[1]; 
     } 
     int[] data=new int[data.length*2]; 
    } 

    public static void main(String[] args){ 
     Test table = new Test(); 
     table.data=new int[1]; 
    } 
} 

,因为它警告我说,

使用javac不会编译

可变数据可能尚未初始化

即使它显然已经初始化,我怎么能解决这个问题?

回答

2

您在Double()方法(实际上是声明了两个这样的变量)中声明了一个本地data变量,它隐藏了具有相同名称的实例变量。

因此,在声明中:

int[] data=new int[data.length*2]; 

当地data变量之前,您正在访问data.length被初始化。

将其更改为:

public void Double(){ 
    if(data == null){ 
     data=new int[1]; 
    } else { 
     data=new int[data.length*2]; 
    } 
} 
+0

对不起,读得太表面,并试图找到在汤里飞。 –

+0

@Eran它应该被称为'Test'。 'double'是关键字,因此不是标识符,因此不是合法的方法名称。 – EJP

+0

@EJP我没想过。然而,由于这个方法的目的是将成员数组的长度加倍,所以'doubleArray()'可能会更好。用类名调用它也会令人困惑,因为它不是构造函数。 – Eran

0

你的代码是完全没有意义的。 data在你测试的时候不可能为null,下面这一行你声明和初始化一个超出范围的局部变量立即是没有意义的,所以所有相关的代码都可以被删除。