Java在构造函数中初始化一个int数组
我有一个class,我在这个class有这个:
//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
为什么?
什么是在构造函数中初始化数组的最好方法?
谢谢
private int[] data = new int[3];
这已经初始化你的数组元素为0.你不需要在构造函数中再次重复。
在你的构造函数中应该是:
data = new int[]{0, 0, 0};
你可以做
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
。
这是因为在构造函数中,声明了一个与属性名称相同的本地variables。
要分配一个所有元素都被初始化为零的整型数组,在构造函数中写入:
data = new int[3];
要分配一个具有其他初始值的整型数组,请将此代码放在构造函数中:
int[] temp = {2, 3, 7}; data = temp;
要么:
data = new int[] {2, 3, 7};
为什么不简单
public Date(){ data = new int[]{0,0,0}; }
你得到错误的原因是因为int[] data = ...
声明了一个新的variables并隐藏了字段data
但是应该注意,数组的内容已经被初始化为0( int
的默认值)
在你的构造函数中,你正在创build另一个int数组:
public Date(){ int[] data = {0,0,0}; }
尝试这个:
data = {0,0,0};
注意:顺便说一句,如果声明为实例variables,则不需要初始化数组元素。 实例variables自动获取默认值,对于整数数组,默认值全为零。
如果你有本地声明的数组,虽然他们你需要初始化每个元素。
最好的方法是不写任何初始化语句。 这是因为如果你编写int a[]=new int[3]
那么默认情况下,在Java中,所有数组的值a[0]
, a[1]
和a[2]
都被初始化为0
! 关于局部variables隐藏字段,请发布您的整个代码,以便我们得出结论。