Java中使用结构体时遇到的问题

来源:互联网 发布:软件著作权 发表状态 编辑:程序博客网 时间:2024/05/20 21:45

在程序设计中,需要使用到一个点的结构体,这个结构体比较简单,如下所示:

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++时,老师就强调了很多遍了,自己任然犯错,说明自己的基础知识还是不够扎实。




原创粉丝点击