对象在java中传递自己

时间:2011-06-19 03:49:44

标签: java object behavior

我想出了如何让一个对象传递给另一个对象,并在其中更新了一个字段。 我通过让ObjectA将自己传递给ObjectB来实现这一点。然后ObjectB更改ObjectA中的字段。 从Main方法开始:(并省略方法标题等)

ObjA.changeField(Obj2)

在ObjectA中

Obj2.callChangeMethod(this);

在ObjectB中

Obj1.makeChange();

我感到困惑的是为什么我必须在第2行传递“this”而不是传递ObjA?

由于

2 个答案:

答案 0 :(得分:1)

原因很简单:这一切都与变量的范围有关。

以下是您提供的代码的略微修饰版本:

public static void main(String[] args) {
    ObjectA Obj1 = new ObjectA();
    ObjectB Obj2 = new ObjectB();

    Obj1.changeField(Obj2);
}

有关此代码的注意事项是Obj1Obj2main方法中声明。这意味着它们属于main方法,不能在main之外使用。这就是“范围”的含义。如果在类中声明了变量,则只有该类可以访问它。如果在方法中声明,则只有该方法可以使用它。这同样适用于循环结构,以及您可以想象的任何其他类型的块。基本上,如果变量是在一对{}中声明的,那么它属于那对{}

现在,如果你查看你的ObjectA类,你会注意到它本身就是一直存在 - 不是声明为main方法的一部分,因此它无法使用变量Obj1 - ObjectA代码不知道Obj1甚至存在。

这就是您必须使用this关键字的原因。您无权访问Obj1,因此您需要使用您有权访问的“变量” - 在这种情况下,您有this始终引用该类的当前实例

因此,尽管您仍在使用相同的对象(由new ObjectA()创建的),但您只需使用不同的变量来引用该对象,具体取决于您当前正在查找的代码在。范围规则确实变得有点复杂,但是你使用Java的次数越多,你理解的类和实例与实例的引用越多,就越容易使用它们。

答案 1 :(得分:0)

对象对其自身的唯一引用是this关键字。最终,对象没有其他方式可以引用自身。