非静态变量初始化问题

Issue with variable initialization when non-static

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

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 不会编译它,因为它警告我

variable data might not have been initialized

即使它显然已经初始化,我该如何解决这个问题?

您在 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];
    }
}

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