的原因很簡單,實際上是:這一切與變量的範圍做。
下面是代碼的略加點綴的版本,你提出:
public static void main(String[] args) {
ObjectA Obj1 = new ObjectA();
ObjectB Obj2 = new ObjectB();
Obj1.changeField(Obj2);
}
注意到這段代碼的事情是,Obj1
和Obj2
是在main
方法的內部聲明。這意味着它們屬於主要方法,並且不能在main
之外使用。這就是「範圍」的含義。如果一個變量是在一個類中聲明的,那麼只有那個類可以訪問它。如果在方法中聲明,只有該方法可以使用它。這同樣適用於循環結構,以及其他任何可以想象的塊。實質上,如果變量是在一對{}
內聲明的,則它屬於該對{}
。
所以,如果你看看你的ObjectA
類現在,你會發現它本身坐 - 它沒有宣佈爲main
方法的一部分,所以它不能使用變量Obj1
- 中代碼不知道Obj1
甚至存在。
這就是爲什麼你必須使用this
關鍵字。您無權訪問Obj1
,因此您需要使用您有權訪問的「變量」 - 在這種情況下,您有this
,它總是指當前類的實例。
所以,儘管你仍然使用相同的對象(由new ObjectA()
創建的),您只需這指的是對象不同的變量,這取決於你的代碼,目前在看。範圍規則確實會變得更復雜一些,但是您玩Java的時間越多,越理解類vs實例vs引用實例,就越容易使用它們。
你能更明確地告訴我們你的變量是如何聲明的嗎? –
另外,如何聲明方法 –