Java:定义用户定义的struct数组

时间:2012-03-14 16:41:56

标签: java

我曾经在C中编写程序代码,现在转向Java,试图在下面的代码中定义一个简单的struct并创建它的数组,但是发生了运行时异常 线程“main”java.lang.NullPointerException中的异常     在CPoint.main(CPoint.java:19) 我知道我必须在某个地方为我的阵列分配内存,但不知道在哪里。任何帮助将不胜感激:

  public class CPoint {
public int x;
public int y;

public CPoint(int size){

    System.out.println("Constructor1 is called");
}
    public CPoint(){
    System.out.println("Constructor2 is called");
}


public static void main(String[] args){

    CPoint [] p = new CPoint [3];

    p[0].x=90;p[0].y=80;        // this is line 19

    System.out.println(p[0].x);
}

}

PS。我想在CPoint类中的某处分配内存,而不是在main中,如果可能的话,我想保持main()代码尽可能简单

4 个答案:

答案 0 :(得分:2)

您需要分配数组中的每个对象:

public static void main(String[] args){

    CPoint [] p = new CPoint [3];

    p[0] = new CPoint();
    p[0].x=90;p[0].y=80;

    System.out.println(p[0].x);
}

编辑:您可以将数组初始化包装到类中的静态方法中 - 实质上是数组工厂方法:

public class CPoint {
    public int x;
    public int y;

    public CPoint() { System.out.println("Inside constructor 1"); }

    public static CPoint[] CPointSet(int size) {
        CPoint[] p= new CPoint[size];
        for(int i=0; i<size; i++)
            p[i] = new CPoint();
        return p;
    }

    public static void main(String[] args) {
        CPoint[] p = CPoint.CPointSet(3);
        p[0].x = 90;
        p[0].y = 80;
    }
}

答案 1 :(得分:1)

数组p包含3个null条目。初始化数组不会为您创建其中的对象。有关详细信息,请参阅Arrays

答案 2 :(得分:0)

您需要在使用它们之前创建它们。

CPoint [] p = new CPoint [3];
p[0] = new CPoint();

答案 3 :(得分:0)

同意Moonbeam,新的CPoint [3]将创建一个Array对象,实际上一个引用数组(与C不同),并且所有三个元素都引用' null '最初。使用新的一些CPoint对象分配没有内存(对于CPoint结构)。

您可以用这种简洁的方式初始化数组:

CPoint[] p = { new CPoint(), new CPoint(), new CPoint() }

p[0].x=90; p[0].y=80;

System.out.println(p[0].x);