Java方法如何使用谁在其中传递它们

时间:2012-04-03 00:09:23

标签: java methods

如果这个标题没有正确描述问题,我很抱歉,但我不确定如何描述它。

我有一个名为changeToWhite()的方法,可以在Piece上调用 例如Piece.changeToWhite()

但是为了能够将这件作品更改为白色,我需要访问该作品,所以我决定将其作为参数传递 例如Piece.changeToWhite(Piece)

作为参数传入似乎是不必要的。

toUpperCase()函数以某种方式执行此操作,例如someString.toUpperCase()

我该怎么做?

2 个答案:

答案 0 :(得分:9)

如果在changeToWhite类上定义Piece,则在实例上可以使用this来获取对当前对象的引用。类似的东西:

class Piece {
    private String color;
    ...
    public void changeToWhite() {
       this.color = 'white';
    }
}

请注意,在类上定义方法时,需要使用实例来调用方法。

所以

Piece piece1 = new Piece();
piece1.changeToWhite();

请注意,Java标准是使用大写字母来定义类(例如Piece)和驼峰大小写(例如changeToWhite),例如方法和字段。

其他方法是使用静态方法。在这种情况下,该方法属于该类,它没有像实例方法那样的this上下文

class Piece {
   private String color; // instance field


   /**
       Takes a piece instance as an argument, and operates on that.
    */
   private static void changeToWhite(Piece piece) {
      piece.setColor('white'); // assume setColor exists
   }

}

但第一种方式更可取。

答案 1 :(得分:3)

这是静态方法和实例方法之间的区别。在您的示例中,调用Piece.changeToWhite()是一个静态方法,但您正在尝试访问实例变量(片段的类型)。

您有两种选择:

  1. 按照您的描述并传递您想要更改的作品。
  2. 将其设为实例方法,然后执行Piece p1 = new Piece(); p1.changeToWhite();
  3. 之类的操作