需要有关使用对特定对象的实例方法的引用的基本信息

时间:2014-11-21 20:47:07

标签: java object reference

我是一位经验丰富的C ++学习Java的人。我正在努力理解那些引用"指向"到对象的特定实例。在C ++中,这很容易。但我对Google" java引用实例对象的次数越多,"我读的越多,我就越熟悉这种东西在Java中是如何运作的。

让我举例说明一个具体的例子。假设我想创建一个拳击模拟。下面是(缩写)代码,设置拳击手,让他们公爵。在战斗结束时,我想要一个" WinnerReference"参考"点"到最后一个拳击手:

public class Boxer {

  String Name;

  public Boxer(String a) {
    Name = a;
  }

  String GetName()  { return Name; }
}

public class BoxingRing {

  public BoxingRing() {
    // Do nothing
  }
  void FightFightFight(Boxer a, Boxer b, >>WinnerReference<< )
    // Boxers fight here
    // WinnerReference is pointed to winning boxer here
  }
}

public class BoxingMatch {

    public static void main(String[] args) throws IOException {

      Boxer Joe = new Boxer("Joe");
      Boxer Sam = new Boxer("Sam");
      BoxingRing TheRing = new BoxingRing();
      // Create reference called "WinnerReference" of type Boxer here

      TheRing.FightFightFight(Sam, Joe, WinnerReference);
      System.out.println("The winner of this boxing match was:  " + WinnerReference::GetName());
      }
}

我整个下午一直在研究这个问题,但找不到直接引导我完成我想做的事情的教程。 (你可能会看到我从C ++的角度来看这个。)

我想问论坛是这样的:这是一个可行的Java程序方法吗?我在Google上搜索正确的术语吗?是否有人推荐的好资源?

非常感谢!               -P

3 个答案:

答案 0 :(得分:3)

  

在战斗结束时,我想要一个&#34; WinnerReference&#34;参考&#34;点&#34;到最后一个拳击手站立

听起来你正在寻找传递参考。这在Java中并不存在 - 所有值都是按值传递的,但对于任何非基本类型,表达式的值无论如何都是一个引用。那个与传递引用相同。

通常,绕过此限制的最佳方法是简单地使用返回值:

Boxer fightFightFight(Boxer a, Boxer b) {
    // Boxers fight here
    return winner; // Or whatever
}

然后在你的主叫代码中:

Boxer winner = ring.fightFightFight(sam, joe);

了解您不会在此处创建任何 Boxer对象非常重要(当然,除非您明确地这样做) - 您&#39 ; ll只是返回一个现有的引用。

在C ++中,这有点等同于

Boxer* fightFightFight(Boxer *a, Boxer *b)

......如果有帮助的话!

(顺便说一句,现在开始遵循Java命名约定是一个好主意。)

答案 1 :(得分:3)

这在Java中是不可能的,因为它是通过值传递的。您可以在(按值)中传递Boxer实例,因为值 引用。 Java命名约定是方法的驼峰(低位字母)。要么返回Boxer,要么传入另一个引用,例如

void fightFightFight(Boxer a, Boxer b, Boxer theChamp) {
  // if a wins...
    theChampe.setName(a.getName());
  // .. or if b wins
    theChampe.setName(b.getName());
}

或者返回获胜者

Boxer fightFightFight(Boxer a, Boxer b) {
  // if a wins...
    return a;
  // otherwise
    return b;
}

最后,Java不是C ++。

答案 2 :(得分:2)

关于WinningReference,您传递的是它的值(在该点为null),而不是指向它的指针。 Java中更常见的方法是:

Boxer fightFightFight(Boxer a, Boxer b)
    // Boxers fight here    
    return winner;
}