gpt4 book ai didi

java - java中对象传递自身

转载 作者:行者123 更新时间:2023-12-01 15:49:31 25 4
gpt4 key购买 nike

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

ObjA.changeField(Obj2)

在对象A中

Obj2.callChangeMethod(this);

在对象B中

Obj1.makeChange();

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

谢谢

最佳答案

原因实际上很简单:这都与变量的范围有关。

这是您提供的代码的稍微修饰版本:

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

Obj1.changeField(Obj2);
}

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

现在,如果您查看 ObjectA 类,您会发现它是独立存在的 - 它没有声明为 的一部分main 方法,因此它不能使用变量 Obj1 - ObjectA 代码根本不知道 Obj1 存在。

这就是为什么您必须使用 this 关键字。您无权访问 Obj1,因此您需要使用您有权访问的“变量” - 在本例中,您拥有始终引用的 this类的当前实例。

因此,尽管您仍然使用相同的对象(由new ObjectA()创建的对象),但您只是拥有引用该对象的不同变量,具体取决于您当前正在查看哪些代码。作用域规则确实变得有点复杂,但是您使用 Java 的次数越多,对类、实例和实例引用的了解越多,就越容易轻松地使用它们。

关于java - java中对象传递自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6400405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com