1.概述
可变参数是jdk1.5后出现的新特性,允许在定义方法时不在指名参数的个数,而在调用方法时直接传入需要的参数即可。
2.案例引入
示例代码:
//输出连个参数的和
public void output(int a,int b){
System.out.println(a+b);
}
//输出三个参数的和
public void output(int a,int b,int c){
System.out.println(a+b+c);
}
说明:例如以上的两个方法,由于事先并不确定传入的参数个数,因此不得不通过方法重载定义多个同名方法,这样做是相当繁琐的。
3.解决方案
第一种解决方案:
//以数组的形式接收参数
public void output(int[] args){
int num=0;
for(int i=0;i<args.length;i++){
num+=i;
}
System.out.println(num);
}
说明:将方法的参数改为数组形式可以解决参数个数不确定的问题,但是却存在另一个麻烦。即调用该方法时,每次都需要建立一个参数数组用于传入,因此这种方法也有一定的繁琐性。
第二种解决方案-利用新特性:
//部分代码
//利用可变参数解决参数不确定的问题
public static void output(int... args){
int num=0;
for(int i=0;i<args.length;i++){
num+=args[i];
}
System.out.println(num);
}
//在main方法中调用该方法
public static void main(String[] args) {
output(1,2,5,9);
}
说明:利用可变参数这一新特性,在调用方法时只需要传入需要的参数即可,不需要额外建立参数数组。在使用时,将方法中的参数(上例中的args
)作为数组操作即可。实际上,可变参数就是数组参数的一种简化形式,只是对参数的数组化封装由虚拟机代为完成。
4.格式
访问修饰符 返回值类型 方法名(数据类型... 参数名){
//具体操作
}
例:
public void show(String... args){
}
5.使用错误
典型错误:
public void show(int... agrs,String s){
//具体代码
}
编译报错:
The variable argument type int of the method show must be the last parameter
说明:当方法的参数中既包含可变参数又包含普通参数时,若有参数置于可变参数后面,则一定发生错误,因为这会导致代码出现歧义。正确的做法是将可变参数置于方法参数列表的最后。
修正代码:
public void show(String s,int... agrs){
//具体代码
}