这似乎是一个常见问题,但对于我读过的所有内容,它们似乎都处理不同的事情。
我正在编写一个程序,其中包含一个管理不同类对象数组的主类,而且我很难从主类中调用第二个类中的print()方法。
Main类尝试调用Unit类中的print()。 Unit类看起来像这样:
public class Unit{
static int numOfUnits = 0;
public Unit[] units = new Unit[8];
private int unitID;
//constructors are here
public void print(){
for (int i = 0; i < units.length; i++)
System.out.print(units[i].unitID);
}
public void add(Unit unit){
mobs[numbofUnits] = unit;
numOfUnits++;
}
}
所以我想要发生的是,通过Main类,我将新的Unit对象添加到单元数组中。当我完成添加它们(使用Main类中的callToAdd.add(unitToAdd)调用)时,我想从Main中调用Unit的print()方法。
我不知道的是,无论是否,以及在何处使用static修饰符,如何引用print()方法本身的变量(也就是说,我是否使用this.unitID,units [我] .unitID等)等等。
让我感到困惑的只是print()方法的本质。我的setter和getter工作正常,因为我完全理解调用specificUnit.setID()正在更改该特定对象的特定变量,但我不知道如何使print()等方法起作用。
谢谢!
答案 0 :(得分:2)
简单回答 - 您需要一个Unit
实例来调用print()
。我强烈建议你回到基础知识 - Learning the Java Language。
答案 1 :(得分:0)
您应该避免在Unit
中实施Unit
列表。您可以通过创建UnitList
类来存储单元列表(可能在ArrayList
中),然后创建UnitList
实例({1}}来完全避免静态状态方法。
main
这分离了从单元本身跟踪一组单元的担忧,并避免了难以调试和单元测试的全局可变状态。
要回答您的问题,下面是最小的更改集,并说明为什么它们应该是public static void main(String[] argv) {
UnitList myUnitList = new UnitList();
myUnitList.add(new Unit(...));
myUnitList.print();
}
。
static