2011-06-19 44 views
0

我想出瞭如何讓對象自己傳遞給另一個對象,並在其中更新一個字段。 我通過讓ObjectA將自己傳遞給ObjectB來做到這一點。然後ObjectB更改ObjectA中的一個字段。 開始在主要方法:(並留出方法標題和這樣)對象在java中傳遞本身

ObjA.changeField(Obj2) 

在對象A

Obj2.callChangeMethod(this); 

在對象B

Obj1.makeChange(); 

我很困惑什麼是我爲什麼必須通過line2中的「this」與傳遞ObjA?

感謝

+2

你能更明確地告訴我們你的變量是如何聲明的嗎? –

+1

另外,如何聲明方法 –

回答

1

的原因很簡單,實際上是:這一切與變量的範圍做。

下面是代碼的略加點綴的版本,你提出:

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

    Obj1.changeField(Obj2); 
} 

注意到這段代碼的事情是,Obj1Obj2是在main方法的內部聲明。這意味着它們屬於主要方法,並且不能在main之外使用。這就是「範圍」的含義。如果一個變量是在一個類中聲明的,那麼只有那個類可以訪問它。如果在方法中聲明,只有該方法可以使用它。這同樣適用於循環結構,以及其他任何可以想象的塊。實質上,如果變量是在一對{}內聲明的,則它屬於該對{}

所以,如果你看看你的ObjectA類現在,你會發現它本身坐 - 它沒有宣佈爲main方法的一部分,所以它不能使用變量Obj1 - 中代碼不知道Obj1甚至存在。

這就是爲什麼你必須使用this關鍵字。您無權訪問Obj1,因此您需要使用您有權訪問的「變量」 - 在這種情況下,您有this,它總是指當前類的實例。

所以,儘管你仍然使用相同的對象(由new ObjectA()創建的),您只需這指的是對象不同的變量,這取決於你的代碼,目前在看。範圍規則確實會變得更復雜一些,但是您玩Java的時間越多,越理解類vs實例vs引用實例,就越容易使用它們。

0

對象本身唯一的引用是this關鍵字。最終,沒有其他方法可以讓對象參考自己。

+0

您可以爲此指定另一個參考。 – Atreys