从JDK5开始,java提供了一个新特性,该特性可以简化某种方法的创建,这种方法需要使用数量可变的参数。这个特性称为“varargs”,也就是可变长度参数(variable-length argument)的英文缩写。使用可变长度参数的方法称为可变参数方法(variable-arity method),或者简称为varargs方法。
可变长度参数通过三个句点(...)标识,例如,下面显示了如何使用可变长度参数编写vaTest()方法:
static void vaTest(int ... v)
这种语法告诉编译器,可以使用零个或更多个参数调用vaTest()方法。所以v被隐式地声明为int[]类型的数组。因此在vaTest()方法内部,可以使用常规的数组语法访问v。下面是使用可变长度参数的例子:
class VarArgs{
void vaTest(int ... v) {
System.out.print("这个可变数组长度为:"+v.length+" ");
System.out.print("这个可变数组元素为:");
for(int x:v)
System.out.print(x+" ");
System.out.println("\n");
}
}
public class Demo {
public static void main(String[] args) {
VarArgs var=new VarArgs();
var.vaTest(10);
var.vaTest(1,2,3);
var.vaTest();
}
}
该程序运行结果如下:
这个可变数组长度为:1 这个可变数组元素为:10
这个可变数组长度为:3 这个可变数组元素为:1 2 3
这个可变数组长度为:0 这个可变数组元素为:
关于这个程序有重要性的两个点需要注意。首先,在vaTest()方法内部,v是作为数组进行操作的。这是因为v是一个数组。语法“...”只不过是告诉编译器将要使用可变长度参数,并且这些参数将被存储在由v引用的数组中。其次,在main()方法中,使用不同数量的参数调用vaTest()方法,包括根本不使用任何参数,参数被自动放进一个数组中并传递给v.对于没有参数的情况,数组的长度为0.
使用可变长度参数的方法也可以使用“常规”参数。但是,可变长度参数必须是方法最后声明的参数。如下;
int test(int a,int b,int ... c)
请记住,可变长度参数必须是最后一个参数。
另外还有一条限制:只能有一个可变长度参数。例如,下面这个声明是非法的:
int test(int a,int b,int ... c,double ... d)