Java 使用构造函数初始化数组中的值的最佳方法是什么?

Java 使用构造函数初始化数组中的值的最佳方法是什么?,java,Java,使用构造函数初始化变量的最佳方法是什么 例如,我试图创建一个数组来容纳6个字符串 class Dice{ public String [] side = new String[5]; public String name; public Dice (String n, String [] a){ name = n; side = a; } } 我尝试过这样设置值: cla

使用构造函数初始化变量的最佳方法是什么

例如,我试图创建一个数组来容纳6个字符串

class Dice{
        public String [] side = new String[5]; 
        public String name;

        public Dice (String n, String [] a){
            name = n;
            side = a;
        }
    }
我尝试过这样设置值:

class diceGame{
    // calling main method
    public static void main (String[] args){
        Dice easy = new Dice("Green:",["Brain","Brain","Brain","a","a","a"]);
}
Dice easy=新骰子(“绿色:”、“大脑”、“大脑”、“大脑”、“a”、“a”)

Dice easy=新骰子(“绿色:,{Brain”,“Brain”,“Brain”,“a”,“a”})

有两次我得到了同样的结果

错误消息错误:表达式的开始非法

另一方面

错误:类骰子中的构造函数骰子不能应用于给定类型

找到:字符串,字符串,字符串,字符串,字符串,字符串,字符串

我想知道哪种方法最有效

这是之前的一个问题,它让我想,如果有这么多的方法,这实际上是最好的


使用varargs构造函数:

class Dice {
    public String [] side; 
    public String name;

    public Dice (String n, String ... a){
        name = n;
        side = a;
    }
}
那么这应该是可行的:

Dice easy = new Dice("Green:","Brain","Brain","Brain","a","a","a");
如有必要,您可以添加一个检查以确保参数的长度是一个特定的值,但这很尴尬,因为调用者不知道需要多少参数。 如果数组始终为固定长度,则可以将每个元素作为单独的参数提供,并在构造函数体中创建数组:

class Dice {
    public String [] side; 
    public String name;

    public Dice (String n, String a1, String a2, String a3, String a4, String a5, String a6){
        name = n;
        side = new String[] {a1,a2,a3,a4,a5,a6};
    }
}

这仅适用于短阵列。否则,只需在构造函数中获取一个数组参数,就像varargs方法一样,但在javadoc中指定所需的长度并在构造函数中验证长度。

使用varargs构造函数:

class Dice {
    public String [] side; 
    public String name;

    public Dice (String n, String ... a){
        name = n;
        side = a;
    }
}
那么这应该是可行的:

Dice easy = new Dice("Green:","Brain","Brain","Brain","a","a","a");
如有必要,您可以添加一个检查以确保参数的长度是一个特定的值,但这很尴尬,因为调用者不知道需要多少参数。 如果数组始终为固定长度,则可以将每个元素作为单独的参数提供,并在构造函数体中创建数组:

class Dice {
    public String [] side; 
    public String name;

    public Dice (String n, String a1, String a2, String a3, String a4, String a5, String a6){
        name = n;
        side = new String[] {a1,a2,a3,a4,a5,a6};
    }
}

这仅适用于短阵列。否则,只需在构造函数中获取一个数组参数,就像varargs方法一样,但在javadoc中指定所需的长度并在构造函数中验证长度。

Dice easy=new Dice(“绿色:”,new String[]{“Brain”,“Brain”,“Brain”,“a”,“a”,“a”})
公共字符串[]侧=新字符串[5]
只应是
公共字符串[]侧
Dice easy=新骰子(“绿色:”,新字符串[]{“大脑”,“大脑”,“大脑”,“a”,“a”})
公共字符串[]侧=新字符串[5]
只应是
公共字符串[]侧将数组传递给构造函数或任何方法时要注意的事项-数组是通过引用传递的,因此调用方能够在调用后更改数组的元素。如果需要确保不会发生这种情况,则必须创建数组的副本,而不是像我在varargs构造函数示例中所做的那样将其分配给成员变量。“数组是通过引用传递的”-不,不是。请看:多亏了这些信息,我喜欢JS中的传播,我不知道java有一个类似的方法(Varargs方法)@雅各布。是的,从技术上讲,“数组引用”是按值传递的。点是数组对象,或者Java中的任何对象都不是按值传递的,因为您总是处理对象引用。@JacobG,可以将Vargas方法与ArrayList一起使用吗?将数组传递给构造函数或任何方法时需要注意的一点-数组是按引用传递的,因此,调用方可以在调用后更改数组的元素。如果需要确保不会发生这种情况,则必须创建数组的副本,而不是像我在varargs构造函数示例中所做的那样将其分配给成员变量。“数组是通过引用传递的”-不,不是。请看:多亏了这些信息,我喜欢JS中的传播,我不知道java有一个类似的方法(Varargs方法)@雅各布。是的,从技术上讲,“数组引用”是按值传递的。点是数组对象,或者Java中的任何对象都不按值传递,因为您总是处理对象引用。@JacobG,可以将Vargas方法用于ArrayList吗?