在Java中从类外部调用方法

时间:2011-08-15 17:44:55

标签: java instance-methods arrays class-method

这似乎是一个常见问题,但对于我读过的所有内容,它们似乎都处理不同的事情。

我正在编写一个程序,其中包含一个管理不同类对象数组的主类,而且我很难从主类中调用第二个类中的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()等方法起作用。

谢谢!

2 个答案:

答案 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