2014-05-09 119 views
0

我想讓那些可以通過數組構造函數(不是我以前做過/不知道,如果甚至有可能),所以我寫了這個:數組作爲對象的構造函數參數

class Job { 
    String name; 
    int [] salary = new int[2]; // to represent a salary range 
    static int jobCount=0; 

    Job(String name,int[] salary){ 
     this.name=name; 
     this.salary=salary; 
     jobCount++; 
    } 
} 

但當我嘗試初始化它時,如下所示:

Job alpha = new Job("First",{20000,35000}); 

我收到'非法啓動類型'和標識符預期錯誤。我究竟做錯了什麼?

回答

2

您需要使用new int[] { }聲明數組內聯:

Job alpha = new Job("First",new int[] {20000,35000}); 
2

我稍微重構代碼:

class Job { 
    String  name  = null; 
    int[]  salary = null; 
    static int jobCount = 0; 

    Job(String name, int... salary){ 
     this.name = name; 
     this.salary = salary; 
     jobCount++; 
    } 
} 

public class Test { 
    public static void main(String[] args) { 
     new Job("abc", 1, 2, 3); 
    } 
} 
  1. 如果你想傳遞的參數變量量」手「,它不是真的有必要使用數組。實際採用可變數量參數的方法更具可讀性。當然,如果你的代碼僅僅用於測試目的,這就失去了意義,Luiggi的答案是絕對正確的。

  2. 如果您只有一個構造函數,將無法初始化該字段,您並不需要初始化字段工資(並創建一個新的數組實例)。爲了瞭解情況,有(簡體):

    • 新的實例被創建
    • 字段都被初始化
    • 構造函數的代碼被執行

    因此,你的領域工資的初始值會被構造函數覆蓋,你將失去它的原始值。這將是緩慢的(內存分配通常非常緩慢),沒有任何理由。

  3. 我也不明白jobCount字段的用途,但它可能是一個更長的討論。

相關問題