📅  最后修改于: 2020-03-30 12:37:53             🧑  作者: Mango
在JDK 5中,Java包含了一项功能,该功能简化了需要采用可变数量参数的方法的创建。此功能称为varargs,它是可变长度参数的缩写。带有可变数量参数的方法是varargs方法。
在JDK 5之前,可变长度参数可以通过两种方式处理。一个使用重载方法(每个使用一个重载),另一个使用参数重载到数组中,然后将此数组传递给方法。它们都可能容易出错,并且需要更多代码。varargs功能提供了更简单,更好的选择。
varargs的语法:
可变长度参数由三个句点(…)指定。例如,
public static void fun(int ... a)
{
// 方法体
}
该语法告诉编译器可以使用零个或多个参数来调用fun()。结果,这里a被隐式声明为int []类型的数组。以下是用于说明上述概念的代码段:
// Java说明varargs的概念
class Test1
{
// 方法接收int
static void fun(int ...a)
{
System.out.println("参数量: " + a.length);
// 使用for each,打印a的愿随
for (int i: a)
System.out.print(i + " ");
System.out.println();
}
// 测试代码
public static void main(String args[])
{
// 调用varargs方法
// 使用不同参数量
fun(100); // 一个参数
fun(1, 2, 3, 4); // 四个参数
fun(); // 无参数
}
}
输出:
参数量: 1
100
参数量: 4
1 2 3 4
参数量: 0
以上程序说明:
注意:一种方法也可以具有可变长度的参数以及其他参数,但是应该确保在方法声明的参数列表中仅存在一个应该最后写入的varargs参数。
int nums(int a, float b, double … c)
在这种情况下,前两个参数与前两个参数匹配,其余参数属于c。
// Java展示varargs和常规参数混合使用
class Test2
{
// 使用string作为参数,紧随varargs之后
static void fun2(String str, int ...a)
{
System.out.println("字符串: " + str);
System.out.println("参数数量: "+ a.length);
// 使用for each展示每个参数
for (int i: a)
System.out.print(i + " ");
System.out.println();
}
public static void main(String args[])
{
// 调用fun2()
fun2("芒果文档", 100, 200);
fun2("CSPortal", 1, 2, 3, 4, 5);
fun2("for芒果");
}
}
String: 芒果文档
参数数量: 2
100 200
String: CSportal
参数数量: 5
1 2 3 4 5
String: for芒果
参数数量: 0
重要事项:
错误的变量参数
void method(String... gfg, int... q)
{
// 编译错误,因为有两个varargs
}
void method(int... gfg, String q)
{
// 编译错误因为vararg在常规参数出现之前
}