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

Java 数组作为对象构造函数中的参数,java,arrays,object,compiler-errors,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.salar

我想创建一个可以传递数组的构造函数(这不是我以前做过的事情/甚至不确定是否可能),所以我写了以下内容:

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});

我得到一个“非法的类型开头”和标识符预期的错误。我做错了什么

需要使用
newint[]{}
内联声明数组:

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

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

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

我稍微重构了您的代码:

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); 
    }
}
  • 如果您想“手动”传递可变数量的参数,那么实际上不需要使用数组。实际上接受可变数量参数的方法更具可读性。当然,如果您的代码只是出于测试目的,那么这就失去了意义,Luiggi的答案是绝对正确的

  • 如果只有一个构造函数,则实际上不必初始化字段salary(并创建一个新的数组实例),该构造函数将初始化该字段。要了解那里发生了什么(简化):

    • 创建新实例
    • 字段已初始化
    • 执行构造函数的代码
    因此,您的field salary初始值将被构造函数覆盖,您将失去其原始值。它将是缓慢的(内存分配通常非常缓慢),没有理由

  • 我也不明白jobCount字段的用途,但可能需要更长时间的讨论


  • 我稍微重构了您的代码:

    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); 
        }
    }
    
  • 如果您想“手动”传递可变数量的参数,那么实际上不需要使用数组。实际上接受可变数量参数的方法更具可读性。当然,如果您的代码只是出于测试目的,那么这就失去了意义,Luiggi的答案是绝对正确的

  • 如果只有一个构造函数,则实际上不必初始化字段salary(并创建一个新的数组实例),该构造函数将初始化该字段。要了解那里发生了什么(简化):

    • 创建新实例
    • 字段已初始化
    • 执行构造函数的代码
    因此,您的field salary初始值将被构造函数覆盖,您将失去其原始值。它将是缓慢的(内存分配通常非常缓慢),没有理由

  • 我也不明白jobCount字段的用途,但可能需要更长时间的讨论