非静态时变量初始化的问题

时间:2016-10-02 08:57:18

标签: java arrays initialization javac

我试图通过以下方式在非静态上下文中加倍数组:

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 个答案:

答案 0 :(得分:2)

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

因此,在声明中:

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

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

将其更改为:

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

答案 1 :(得分:0)

你的代码完全没有意义。 data在测试它时不可能为null,并且您声明并初始化超出范围的局部变量的下一行同样毫无意义,因此可以删除所有相关代码。