2017-02-18 89 views
-3

我正在開發一個項目,我在想,是否將參數的順序傳遞給構造函數。例如,如果我創建了一個程序:構造函數排序

public class Test{ 
    int t3; 
    String h; 
    Test(int t1, String t2){ 
     t3 = t1; 
     String h = t2; 
    } 
} 

難道不管我,我這樣做:的

Test t4 = new Test("hello", 6); 

代替

Test t4 = new Test(6, "hello"); 

喜歡在構造函數中的順序?謝謝!

+5

試一下,看看會發生什麼。 – Kayaman

+0

是的,它很重要。 –

+0

在上面的例子中,第一個參數必須是一個整數,第二個參數必須是一個字符串。 –

回答

0

它很重要,就像任何方法調用一樣。如果你有這樣的事情:

public SomeClass(int a, int b)... 

如果你沒有

new SomeClass(1, 2); 

怎麼可能編譯器知道你實際上意味着a爲2和b爲1?如果所有的參數都是不同類型的,那麼編譯器可能破譯你的目標的唯一情況就是 - 在大多數情況下,編譯器不可能知道你打算做什麼。

即使所有類型都是都不同,編譯器如何知道你是按照不同的順序傳遞它們的?儘管它知道它可以讓你免於錯誤。

請注意,其他一些語言(如C#)允許您以不同於您指定的順序傳遞參數,但必須給它們加上標籤,以便編譯器能夠知道哪個是哪個。

1

你可以這樣做:

public class Test{ 
    int t3; 
    String h; 
    Test(int t1, String t2){ 
    h = t2; 
    t3 = t1; 
    } 
    } 

但不是說:

Test t = new Test(t2,t1); 

因爲當你打電話,你需要尊重參數順序的任何方法。 對於真實的如果你想你可以做到這一點(你的代碼將編譯和執行),但是你將有價值轉換。

1

是的......你必須尊重參數的順序,因爲構造函數會期望一個Integer作爲第一個參數,而一個String作爲第二個參數;與此不同的任何東西都可能會引發錯誤。

1

是,爲了事宜,但你可以「超載」,這意味着添加具有逆轉喜歡的參數列表中的另一個構造函數..

Test(String t2, int t1){ 
this.Test(t1,t2); 
} 

..和你看,你可以在裏面調用第一個構造函數java會找到簽名所使用的正確版本。