2012-02-14 16 views
0

如果我有一個類創建一個新的對象,並將refrence傳遞給這個新的對象,那麼我應該使用this()還是應該創建一個該類的聲明,然後傳遞聲明。我似乎無法找到一個明確的例子,當我將每個案例傳遞給一個子對象的時候。當我將句柄傳遞給java中的子類時,我應該使用聲明還是this()?

public class ThisClass { 

    ThisClass decHandle; 
    ThisClass someThing = this; 
    public String decString = "some string"; 
    SomeOtherClass classObject1 = new SomeOtherClass(this); 
    SomeOtherClass classObject2 = new SomeOtherClass(decHandle); 
    SomeOtherClass classObject3 = new SomeOtherClass(someThing); 

} 

public class SomeOtherClass { 

    ThisClass decHandle; 
    public SomeOtherClass (ThisClass handle){ 
     decHandle = handle; 
    } 
    String valueForOther = decHandle.someThing; 

} 

我主要需要知道哪些是從父級傳遞句柄給子類時的最佳做法。

+0

只是一個快速更新的任何人跑過這個問題。當時我不明白java的術語,甚至當時還有什麼正確的用法。 – Xyberviri 2017-05-16 18:49:07

回答

3

這裏有很多錯誤。

1)SomeOtherClass的最後一條語句應該是

String valueForOther = decHandle.decString; 

,而不是

String valueForOther = decHandle.someThing; 

2)當你說

SomeOtherClass classObject1 = new SomeOtherClass(this); 

它會拋出一個NullPointerException,因爲你有尚未構建的對象。 「this」是指當前的對象。在你的代碼中,沒有對象,因此這行會引發異常。這同樣適用於下一行。

3)「孩子」表示該類繼承父類。僅僅因爲SomeOtherClass具有對ThisClass的引用,並不意味着SomeOtherClass是一個孩子。

4)讓一個班級的成員具有公開的知名度不是好習慣。

好吧,所以這裏是你如何做到這一點。

public class ThisClass 
{ 
    private String decString = "some string"; 
    private SomeOtherClass someOtherClass; 

    public ThisClass() 
    { 
     someOtherClass = new SomeOtherClass(this); 
    } 

    public String getDecString() 
    { 
     return decString; 
    } 
} 

public class SomeOtherClass 
{ 

    private ThisClass decHandle; 
    private String valueForOther; 

    public SomeOtherClass (ThisClass handle) 
    { 
     decHandle = handle; 
     valueForOther = decHandle.getDecString(); 
    } 
} 
+0

謝謝CodeBlue正是我需要知道的關於訪問類和創建它的類之間的信息的信息。 我還在努力學習轉移我的思維方式爲面向對象和java – Xyberviri 2012-02-14 04:49:00

+0

只是一個更新,這正是我需要的信息,當時開始玩java代碼,儘可能多地閱讀。來自主要是php,perl和js的背景,我沒有一個很好的基礎來同時學習java和OOP。 我也有困難,如果從另一個對象中調用一個對象,一旦我創建它並將它釋放到內存中。 這主要是因爲我通過查看現有代碼並將其拆開來進行編碼學習。 再次感謝CodeBlue和El開發人員的幫助 – Xyberviri 2012-05-04 01:17:54

0

這樣做:

SomeOtherClass classObject1 = new SomeOtherClass(this); 

創建指向this沒有達到任何一個實例變量:你只是重複什麼this做反正。

編輯:請記住,變量(除原語以外)都是Java中的引用,因此您的示例中的thissomeThing都指向同一個對象。然後,你將哪一個傳遞給SomeOtherClass無關緊要;它將以任何方式接收對同一對象的引用。

handle局部變量SomeOtherClass不知道或關心它的參考來自何處。

請注意,在您的示例中,ThisClass.decHandle爲空,因爲您尚未爲其指定值。 (其實ThisClass可能不會編譯,因爲未初始化的值,但我沒有測試過)

0

最佳做法是在需要將參考傳遞給「this」對象時使用this。這就是它的原因(除其他外)。如果你試圖避免使用它,你最終會讓代碼變得更加冗長和不可讀,並且/或者在運行時使用更多的內存。

(用於其他目的使用的this(如區分領域和本地人)是有爭議的,但它是很難作出一個令人信服的情況下,這是「最佳實踐」 ......或沒有。無論如何,這是一個不同的問題。)

相關問題