在程序设计中,需要使用到一个点的结构体,这个结构体比较简单,如下所示:
public static class Point{
public static int x;
public static int y;
}
这时需要一个类型为Point的数组,当声明了一个长度为4的数组,并初始化后,效果是这样的:
public class test_struct {
public static class Point{
public static int x;
public static int y;
}
public static void main(String[] args) {
int length=4;
Point[]points=new Point[length];
for(int i=0;i<length;i++){
points[i]=new Point();
points[i].x=i+1;
points[i].y=i+1;
}
for(int i=0;i<length;i++){
System.out.println(points[i].x+" "+points[i].y);
}
}
}
程序输出:
4 4
4 4
4 4
4 4
而预想结果应该是:
1 1
2 2
3 3
4 4
为什么会出现这种情况呢?明明已经对这个数组初始化了啊!原来问题出现在static上,我们回过头来在来看看声明的结构体类:
public static class Point{
public static int x;
public static int y;
}
这样声明是错的,正确的方式应该是:
public static class Point{
public int x;
public int y;
}
去掉static,因为如果声明为static后,x和y这两个变量就为静态变量了,在程序初始化之前,他们就已经存在了。
而且在当前所有数组元素中,公用一个x和y,关于初始化函数的执行顺序,其实在学习c++时,老师就强调了很多遍了,自己任然犯错,说明自己的基础知识还是不够扎实。