如何使对象在数组中调用其构造函数?

时间:2017-06-04 21:32:36

标签: java

public static void createPlayers(int x) {
    System.out.println("How many players/AI will be playing this game?");
    numOfPlayers = scan.nextInt();
    HoldEmTurns players[] = new HoldEmTurns[x];
    for (int c = 0; c < x; c++) {
        players[c] = new HoldEmTurns(players[c].getHuman(),players[c].getName());
    }

}

每当我运行它时,它会运行这两行然后终止:

System.out.println("How many players/AI will be playing this game?");
    numOfPlayers = scan.nextInt();

那么如何让一个对象在数组中调用它的构造函数呢?

1 个答案:

答案 0 :(得分:1)

考虑这个示例

假设您有一个 SomeClass 类,它包含两个字段 String &amp; int

public class SomeClass {

    String aString;
    int someInteger;
    ...............
}

每次创建 Instance SomeClass 时,您都可以创建一个构造函数。因此,您创建的每个 Object 类型 SomeClass ,您必须使用参数初始化它。最终,它将存在,其字段现在具有值而不是 null

public SomeClass(String aString, int someInteger){
    this.aString = aString;
    this.someInteger = someInteger;
}

此外,您可以创建另一个不接受参数/参数的构造函数(称为重载)。因此,您可以创建此类的实例并初始化其属性,也可以创建其属性尚未初始化的空对象(以便稍后在创建对象后通过setter为它们分配值): / p>

public SomeClass(){
// Empty constructor
}

现在考虑一下这个可以在创建的对象上调用的setter方法。通过这些方法,您可以设置/获取对象属性/字段。例如,此方法更改 aString 字段值:

public void changeTheString(String newString){
        aString = newString;
}

您可以创建其他方法来操纵所创建对象的属性,例如:

public void changeTheInteger(int newInteger){
    someInteger = newInteger;
}

public String getTheString(){
    return aString;
}

现在让我们测试创建 SomeClass 类型的对象数组,考虑这个数组最多可以包含3个 SomeClass 类型的对象:

SomeClass array[] = new SomeClass[3];

现在数组 EMPTY ,但 CAN 可以容纳 THREE 类型的对象SomeClass 即可。在每个索引处(无论您是否使用循环),您必须添加对象并初始化,如下所示:

for(int i=0; i<3; i++){
    array[i] = new SomeClass("Some String", i); // values are for example
}

现在,您可以在每个索引处创建的对象上调用方法,例如:

String theString = array[0].getTheString();
System.out.println(theString); //to print it out

// changing the String field for SomeClass Object/Instance at index 1 in the array 
array[1].changeTheString("I am changing the String");

// and so on
array[2].changeTheInteger(5);
相关问题