数组作为对象构造函数中的参数

时间:2014-05-09 17:53:03

标签: java arrays object compiler-errors

我想制作一个可以传递数组的构造函数(不是我之前做过的事情,甚至不可能确定),所以我写了这个:

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 个答案:

答案 0 :(得分:2)

您需要使用new int[] { }来内联声明数组:

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

答案 1 :(得分: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. 如果您只有一个构造函数,那么您不必初始化字段 salary (并创建一个新的数组实例),无论如何都会初始化该字段。要了解那里发生了什么(简化):

    • 创建新实例
    • 字段已初始化
    • 执行构造函数的代码

    因此,您的字段 salary 的初始值将被构造函数覆盖,您将失去其原始值。它会很慢(内存分配通常非常慢)没有理由。

  3. 我也不了解 jobCount 字段的用途,但可能会进行较长时间的讨论。

相关问题