我有一个班级,在那个班级我有这个:
//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
为什么?
在构造函数中初始化数组的最佳方法是什么?
感谢
答案 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)
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
!关于隐藏字段的局部变量,请将整个代码发布给我们以便得出结论。