2012-08-14 49 views
0

對於下面的代碼行:簡單的Java構造

public class Base{ 

    private int num1 = 0; 
    private int num2 = 0; 
    private static int dif = 0; 

    public Base(int num){ 
     this(num,num+1); 
     System.out.println("Base constructor1"); 
    } 

    public Base(int num1, int num2){ 
     System.out.println("Base constructor2"); 
     this.num1 = num1; 
     this.num2 = num2; 
     dif = num2 - num1; 
    } 

    public int sum(){ 
     return num1 + num2; 
    } 

    public static int getDif(){ 
     return dif; 
    } 
} 

應該怎樣那些2線打印?

Base b1 = new Base(10); 
Base b2 = new Base(4,7); 

我想,如果我要了解以下行:this(num,num+1);我就明白了一切...

日Thnx

+0

請嘗試並縮進您的代碼。使它更容易閱讀 – 2012-08-14 14:39:28

+1

this(num,num + 1);調用public Base(int num1,int num2) – NimChimpsky 2012-08-14 14:40:11

+1

如果你在調試器中遍歷你的代碼,你可以看到每行代碼。 – 2012-08-14 14:54:05

回答

2
this(num,num+1); 

通話按照同一對象的構造

public Base(int num1, int num2){ 

爲什麼?

如果用戶通過調用構造函數與單PARAM創建的對象爲Base,您的代碼不會在上面構造了一些默認的計算,並num2diff值。

0
Base b1 = new Base(10); 
Base b2 = new Base(4,7); 

這將打印出:

基地constructor2

基地constructor1

基地constructor2

由於構造函數鏈中,第一個構造函數被調用的實例化(public Base(int num1))調用其他構造函數(public Base(int num1, int num2)),它打印出「Base constructor2」,然後執行返回以打印出「Base constructor1」。

b2然後被實例化,只打印出「Base constructor2」,因爲使用的構造函數不鏈接到另一個構造函數。

+0

@Lunar:當您發佈此評論時,我相信我處於更新中,謝謝。 – 2012-08-14 14:47:38

0

既然你傳遞一個整數參數的第一個電話:

Base b1 = new Base(10); 

它會調用構造函數只有一個整型參數,並打印出:

Base constructor1 

第二次調用傳入兩個整數參數,所以它會調用帶有兩個整數參數的構造函數並打印出來:

Base constructor2 

我建議你自己測試一下,嘗試事情可能是更好地學習和理解的最簡單的方法。

2

第一條語句Base b1 = new Base(10);是構造函數鏈的一個例子,它會產生以下結果 -

Base constructor2 

Base constructor1 

而第二個是簡單的。這將打印

Base constructor2 
+0

+1用於回答實際問題。 「那兩行會打印什麼?」 – km1 2012-08-15 13:52:38

0

當你調用具有多個定義的功能,像

public Base(int num) 

VS

public Base(int num1, int num2) 

的一個依據是什麼參數,你用選擇。所以,通過調用

new Base(5); 

你會碰到第一個構造函數,只有一個int。

此構造說,「好,我想這兩個定義,但我只有一個號碼。讓我們稱之爲第二構造,只是讓num2等於這個第一號加1。

this(num,num+1); //num == 5 

電話

Base(int num1, int num2) 

其中將其提供num1 == 5,和num2 == 6,這是所提供的號加1。

0

如果喲ü要運行這兩條線,你會看到...

Base constructor2 
Base constructor1 
Base constructor2 

在您的控制檯,因爲第一個對象的聲明會叫一個構造函數,然後其他的,而第二個聲明只調用第二個構造函數。