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

Java 非静态时变量初始化问题,java,arrays,initialization,javac,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(St

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

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

变量数据可能尚未初始化


即使它显然已经初始化,我如何才能避免这个问题?

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

因此,在声明中:

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

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

你的代码完全没有意义<代码>数据
在测试时不可能为空,下面一行声明并初始化一个立即超出范围的局部变量同样没有意义,因此可以删除所有相关代码。

您的代码完全没有意义<代码>数据
在测试时不可能为空,下面一行声明并初始化一个立即超出范围的局部变量也同样没有意义,因此可以删除所有相关代码。

抱歉,读得太肤浅了,并试图在汤里找到苍蝇。@Eran它应该被称为
Test
double
是一个关键字,因此不是标识符,因此不是合法的方法名。@EJP我没有考虑过它。但是,由于此方法的目的是将成员数组的长度增加一倍,因此
doubleArray()
可能更适合。使用与该类相同的名称调用它也会让人困惑,因为它不是构造函数。抱歉的阅读过于肤浅,试图在汤中找到苍蝇。@Eran它应该被称为
Test
double
是一个关键字,因此不是标识符,因此不是合法的方法名。@EJP我没有考虑过它。但是,由于此方法的目的是将成员数组的长度增加一倍,因此
doubleArray()
可能更适合。用与类相同的名称调用它也会让人困惑,因为它不是构造函数。