解释一下Java中的Varargs吗?
由于Java的一个特性叫做可变参数(varargs),一个方法可以接受可变数量的参数。这对于需要能够处理未知或可变数量输入的方法非常有用。
在Java 5引入varargs之前,我们有两种处理需要接受可变数量参数的方法的方式。一种方式是使用重载的方法。该方法必须在多个迭代中开发,每个迭代都有不同数量的参数。
如果过程中有很多参数,可能会变得复杂且难以维护。
Varargs的语法
在内部,使用一个单维数组来实现varargs方法。这意味着varargs方法的参数保存在一个数组中,可以使用每个参数的索引来访问它。可以使用三个连续的点号(…)来指定varargs参数。
public static void happy(int ... a)
{
// method body
}
在这种方法中,编译器被告知fun()可以使用0-n个或更多个参数进行调用。因此,在这种情况下,隐式指定为int[]类型的数组。
示例1
display()
此代码定义了一个名为VarargsInstance的类,其中有一个方法名为display,可以接受可变数量的字符串参数。在主函数中,display方法被调用了两次 – 一次没有任何参数,一次带有四个字符串参数。当调用时,该方法会打印出该消息。
算法
- 步骤1:创建一个名为VarargsInstance的类。
-
步骤2:定义一个名为display()的静态方法。该方法接受可变数量的String参数。
-
步骤3:在display()方法内部,将以下消息打印到控制台:”The display method has been called”。
-
步骤4:创建一个主方法。
-
步骤5:在主方法中,使用零个参数调用display()方法一次。
-
步骤6:再次使用四个参数调用display()方法。
-
步骤7:运行程序。
示例
public class VarargsInstance{
public static void display(String... values){
System.out.println("The display method has been called ");
}
public static void main(String args[]){
display();//zero argument
display("my","name","is","tutorialspoint");//four arguments
}
}
输出
The display method has been called
The display method has been called
示例2
happy()
这段代码定义了一个名为Example1的类,其中有一个可以接受任意数量整数参数的happy()方法。在这个方法内部,它通过循环显示参数的数量和参数列表。在主程序中,它展示了使用不同数量的参数调用happy()方法,输出显示了所提供参数的数量和值。
算法
- 步骤1:创建一个名为Example1的类。
-
步骤2:定义一个名为happy()的静态方法。该方法接受可变数量的整数参数。
-
步骤3:在happy()方法内部,执行以下操作:
- 将以下文本打印到控制台:”Count of arguments: ” + a.length。
-
通过使用for each循环遍历变量a,将数组的内容打印到控制台。
-
步骤4:创建一个main方法。
-
步骤5:在main方法中,执行以下操作:
- 使用一个参数250调用happy()方法一次。
-
再次使用四个参数20、30、40和50调用happy()方法。
-
再次不使用任何参数调用happy()方法。
-
步骤6:运行程序。
示例
public class Example1 {
static void happy(int... a)
{
System.out.println("Count of arguments: "
+ a.length);
// employing for each loop to display contents of a
for (int i : a)
System.out.print(i + " ");
System.out.println();
}
public static void main(String args[])
{
// Calling the varargs method with various number of parameters
happy(250);
// four parameters
happy(20, 30, 40, 50);
// no parameter
happy();
}
}
输出结果
Count of arguments: 1
250
Count of arguments: 4
20 30 40 50
Count of arguments: 0
示例3
display()
在这段代码中,有一个名为VarargsInstance2的类,其中有一个方法display(),可以接受可变数量的字符串参数。当调用该方法时,它会打印”display method called”,然后在单独的行上列出每个提供的参数。在主要部分中,通过使用不同数量的参数来调用display()方法来演示,生成显示的输出如下所示。
算法
- 步骤1:创建一个名为VarargsInstance2的类。
-
步骤2:定义一个名为display()的静态方法。该方法接受可变数量的字符串参数。
-
步骤3:在display()方法中,执行以下操作:
- 在控制台打印以下消息:”display method called”。
-
使用for each循环遍历值变量,并将数组的内容打印到控制台。
-
步骤4:创建一个main方法。
-
步骤5:在main方法中,执行以下操作:
- 不带参数调用display()方法一次。
-
再次带一个参数”hey”调用display()方法。
-
再次带四个参数”welcome”,”all”,”to”,”Tutorialspoint”调用display()方法。
-
步骤6:运行程序。
示例
public class VarargsInstance2{
static void display(String... values){
System.out.println("display method called ");
for(String s:values){
System.out.println(s);
}
}
public static void main(String args[]){
display();//zero argument
display("hey");//one argument
display("welcome","all","to","Tutorialspoint");//four arguments
}
}
输出
display method called
display method called
hey
display method called
welcome
all
to
Tutorialspoint
示例4
for()
使用接受一个字符串和可变数量整数参数的joy()方法,此代码定义了一个名为Tutorialspoint的类。当调用该方法时,它会显示给定的字符串、提供的参数数量,然后使用循环列出整数参数。在主要部分,通过以不同组合的字符串和整数调用joy()方法来演示它,生成如示例所示的输出。
算法
- 步骤1:定义一个名为joy()的静态方法。该方法接受一个String参数和一个可变数量的int参数。
-
步骤2:在joy()方法内部,执行以下操作:
- 将”String: ” + str打印到控制台。
-
将”count of arguments is: ” + b.length打印到控制台。
-
使用for each循环遍历b变量,并将数组的内容打印到控制台。
-
步骤3:创建一个main方法。
-
步骤4:在main方法内部,执行以下操作:
- 用字符串”TLP”和两个整数250和350调用joy()方法一次。
-
用字符串”Example”和五个整数20、30、40、50和60再次调用joy()方法。
-
用字符串”for students”和无整数再次调用joy()方法。
-
步骤5:运行程序。
示例
public class Tutorialspoint{
static void joy(String str, int... b)
{
System.out.println("String: " + str);
System.out.println("count of arguments is: "
+ b.length);
// employing for each loop to display contents of a
for (int i : b)
System.out.print(i + " ");
System.out.println();
}
public static void main(String args[])
{
// Calling joy() with different parameter
joy("TLP", 250, 350);
joy("Example", 20, 30, 40, 50, 60);
joy("for students");
}
}
输出
String: TLP
count of arguments is: 2
250 350
String: Example
count of arguments is: 5
20 30 40 50 60
String: for students
count of arguments is: 0
结论
可变参数方法可以有意地多样化,尽管这种多样化可能会引入不确定性。在JDK 5之前的时代,有两种方法来处理可变长度的参数:重载或利用数组参数。需要注意的是,在方法内部,只允许有一个可变参数。此外,变量参数(Varargs)必须保持其作为最后一个参数的位置。