Java在构造函数中初始化一个int数组

时间:2011-11-09 16:50:37

标签: java

我有一个班级,在那个班级我有这个:

 //some code
 private int[] data = new int[3];
 //some code

然后在我的构造函数中:

public Date(){
    data[0] = 0;
    data[1] = 0;
    data[2] = 0;
}

如果我这样做,一切都很好。默认数据值已初始化,但如果我改为:

public Date(){
    int[] data = {0,0,0};
}

它说:

Local variable hides a field

为什么?

在构造函数中初始化数组的最佳方法是什么?

感谢

6 个答案:

答案 0 :(得分:157)

private int[] data = new int[3];

这已经将数组元素初始化为0.您无需在构造函数中再次重复此操作。

在你的构造函数中它应该是:

data = new int[]{0, 0, 0};

答案 1 :(得分:6)

你可以这样做:

public class Data {
    private int[] data;

    public Data() {
        data = new int[]{0, 0, 0};
    }
}

在构造函数中初始化data,或者:

public class Data {
    private int[] data = new int[]{0, 0, 0};

    public Data() {
        // data already initialised
    }
}

在执行构造函数中的代码之前初始化data

答案 2 :(得分:4)

为什么不简单

public Date(){
    data = new int[]{0,0,0};
}

您收到错误的原因是int[] data = ...声明了一个新变量并隐藏了字段data

然而应该注意的是,数组的内容已经初始化为0(默认值为int

答案 3 :(得分:4)

这是因为,在构造函数中,您声明了一个与属性同名的局部变量。

要分配一个所有元素初始化为零的整数数组,请在构造函数中写入:

data = new int[3];

要分配具有其他初始值的整数数组,请将此代码放在构造函数中:

int[] temp = {2, 3, 7};
data = temp;

或:

data = new int[] {2, 3, 7};

答案 4 :(得分:1)

你在构造函数中创建另一个int数组:

 public Date(){
  int[] data = {0,0,0};
  }

试试这个:

 data = {0,0,0};

注意:顺便提一下,如果将数组元素声明为实例变量,则不需要初始化它们。实例变量自动获取其默认值,对于整数数组,默认值均为零。

如果你有本地声明的数组,你需要初始化每个元素。

答案 5 :(得分:0)

最好的方法是不要编写任何初始化语句。这是因为如果你写的话 int a[]=new int[3]然后默认情况下,在Java中,数组的所有值,即a[0]a[1]a[2]都被初始化为0!关于隐藏字段的局部变量,请将整个代码发布给我们以便得出结论。