我想出了如何让一个对象传递给另一个对象,并在其中更新了一个字段。 我通过让ObjectA将自己传递给ObjectB来实现这一点。然后ObjectB更改ObjectA中的字段。 从Main方法开始:(并省略方法标题等)
ObjA.changeField(Obj2)
在ObjectA中
Obj2.callChangeMethod(this);
在ObjectB中
Obj1.makeChange();
我感到困惑的是为什么我必须在第2行传递“this”而不是传递ObjA?
由于
答案 0 :(得分:1)
原因很简单:这一切都与变量的范围有关。
以下是您提供的代码的略微修饰版本:
public static void main(String[] args) {
ObjectA Obj1 = new ObjectA();
ObjectB Obj2 = new ObjectB();
Obj1.changeField(Obj2);
}
有关此代码的注意事项是Obj1
和Obj2
在main
方法中声明。这意味着它们属于main方法,不能在main
之外使用。这就是“范围”的含义。如果在类中声明了变量,则只有该类可以访问它。如果在方法中声明,则只有该方法可以使用它。这同样适用于循环结构,以及您可以想象的任何其他类型的块。基本上,如果变量是在一对{}
中声明的,那么它属于那对{}
。
现在,如果你查看你的ObjectA
类,你会注意到它本身就是一直存在 - 不是声明为main
方法的一部分,因此它无法使用变量Obj1
- ObjectA
代码不知道Obj1
甚至存在。
这就是您必须使用this
关键字的原因。您无权访问Obj1
,因此您需要使用您有权访问的“变量” - 在这种情况下,您有this
始终引用该类的当前实例
因此,尽管您仍在使用相同的对象(由new ObjectA()
创建的),但您只需使用不同的变量来引用该对象,具体取决于您当前正在查找的代码在。范围规则确实变得有点复杂,但是你使用Java的次数越多,你理解的类和实例与实例的引用越多,就越容易使用它们。
答案 1 :(得分:0)
对象对其自身的唯一引用是this
关键字。最终,对象没有其他方式可以引用自身。