2016-08-13 98 views
-2

我試圖學習java和和一起移動OK,但我跑過這個例子,我不明白「myTuppy」是如何從myPuppy傳遞到名稱。有人可以解釋這是如何工作的?我不明白2是如何鏈接的。不理解構造函數和對象之間的鏈接


public class Puppy { 

    public Puppy(String name) { 
     // This constructor has one parameter, name. 
     System.out.println("Passed Name is :" + name); 
    } 

    public static void main(String [] args) { 
     // Following statement would create an object myPuppy 
     Puppy myPuppy = new Puppy("tommy"); 
    } 
} 

如果我們編譯並運行上述程序,那麼它會產生如下結果:

傳遞的名稱是:湯米


+0

這是爲什麼出乎意料?你已經定義了一個構造函數,它接受一個字符串,所以當你用一個被調用的字符串構造一個實例時。 – jonrsharpe

回答

2

它沒有從myPuppy傳遞到name。發生什麼是:

  • 當計算new Puppy(...)表達式時,將創建一個新的Puppy對象。
  • 構造函數被調用。構造函數中的每個參數(在本例中爲name)被替換爲傳遞給new的參數。在這種情況下,"tommy"。因此,在構造函數中,變量name現在引用字符串tommy
  • 然後將新構建的對象分配給變量myPuppy
0

你能想到的構造爲一個參數是「名稱」的函數。在這個函數的主體中,你有控制檯打印語句。

一旦你在你的主程序中調用它,那麼一個Puppy將被初始化爲提供的名稱,這裏是「tommy」。

一旦你初始化了這個對象,這個名字將被打印在屏幕上。

0

顧名思義,構造函數構造了一個對象。一個對象是一個類上的一個實例。在你的情況下,Puppy是你正在創建一個對象的類。

在Java中,新對象由new關鍵字創建。當你創建一個新的類的對象時,你可以想到構造函數就像一個函數一樣被調用。

在這種情況下,new Puppy("tommy")將通過構造函數引用String「tommy」,並將其分配給變量name。然後System.out.println(...)調用將被傳遞給「tommy」並在控制檯上打印出來。