-3

我有一堂课叫ElementInfo

public class ElementInfo {

    public String name;
    public String symbol;
    public double mass;

}

然后我尝试创建一个ElementInfo像这样的数组:

ElementInfo e[] = new ElementInfo[2];

e[0].symbol = "H";
e[0].name = "Hydrogen";
e[0].mass = 1.008;

//...

不要告诉我我必须调用new类的每个实例!

我可以这样做:

ElementInfo e[] = new ElementInfo[100];
for(ElementInfo element: e){
    e = new ElementInfo();
}
4

8 回答 8

3

您必须为类的每个元素调用 new。

public class ElementInfo {

    private String name;
    private String symbol;
    private double mass;

    public String get_name() { return name; }
    public String get_symbol() { return symbol; }
    public double get_mass() { return mass; }

    public ElementInfo(name, symbol, mass) {
        this.name = name;
        this.symbol = symbol;
        this.mass = mass;
    }
}

然后像这样创建它们:

e[0] = new ElementInfo("H", "Hydrogen", 1.008);
于 2012-09-07T21:37:13.023 回答
3

不要告诉我我必须为类的每个实例调用 NEW!

确切地。

您刚刚创建了一个空数组。

于 2012-09-07T21:37:26.347 回答
3
ElementInfo e[] = new ElementInfo[2];

e[0] = new ElementInfo();
e[0].symbol = 'H'; ...
于 2012-09-07T21:38:03.443 回答
3

您必须为每个元素创建一个新实例,但这并不难:

ElementInfo e[] = new ElementInfo[2];
for (int i = 0; i < e.length; i++)
    e[i] = new ElementInfo();
于 2012-09-07T21:38:03.307 回答
2

是的,你必须这样做。

创建数组时,您只需为实际对象的引用创建空间。最初的值为null

要放置对对象的引用,请执行分配

e[0] = new ElementInfo();

或者

ElementInfo a = new ElementInfo();
....
e[0] = a;

放松,打字将是你作为程序员的最后一个问题:-D

于 2012-09-07T21:38:51.260 回答
1

是的。现在它是一个包含 ElementInfo 对象但每个索引为空的数组。

为什么不创建一个接受参数的构造函数。然后

ElementInfo [] elements = {new ElementInfo("H", "Hydrogen", 1.008), new ElementInfo("C", ....)};
于 2012-09-07T21:40:59.487 回答
1

通过声明一个数组,该数组类型的实例不会自动填充该数组。

e[0] = new ElementInfo();

您还可以使用 for 循环轻松地在每个索引处实例化一个对象。

for (int i = 0; i < e.length; i++) {
    e[i] = new ElementInfo();
}
于 2012-09-07T21:40:16.210 回答
0
ElementInfo e[] = new ElementInfo[100]; 
for(ElementInfo element: e){ 
    e = new ElementInfo(); 
}

您不能这样做,因为e它是一个数组类型变量,这意味着您不能为它分配对 type 对象的引用ElementInfoe = new ElementInfo();就是我所指的。

看看达尔姆斯的回答

于 2012-09-07T21:50:29.377 回答