可变参数(不定项参数)
我们刚刚学习了方法的重载,可以根据不同的参数列表来调用同名的方法,这是在参数个数和参数类型确定的情况下。如果我们不知道参数的个数不知道参数的类型,或者参数列表的种类非常多需要重载很多次以至于工作量变得非常庞大,那该如何解决呢?
-
JDK1.5开始,Java支持传递同类型的可变参数给一个方法
-
在方法声明中,在指定参数类型后加一个省略号(…)
-
一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明
-
语法示例:
用…省略号指若干个参数
当可变参数前面有明确规定好的参数时,输入的值先传入到其中,之后剩余的输入才被传入可变参数
代码:
public static void main(String[] args) { Demo04 demo04 = new Demo04(); // 新建Demo04类对象demo04以调用类方法 demo04.test(1,2,3,4,5); // 按照参数的先后顺序,依次传入test方法的参数列表中 } public void test(int x, int y, int... i){ // 参数x,参数y是个数,类型明确的参数,i是类型明确但数量不定的不定项参数数组 // 先输出参数x System.out.println("参数x:"+x); // 再输出参数y System.out.println("参数y:"+y); // 可变参数从现在开始输出 for(int j=0;j<i.length;j++){ System.out.println("可变参数数组i["+j+"]的值为:"+i[j]); } }
演示:
参数x:1 参数y:2 可变参数数组i[0]的值为:3 可变参数数组i[1]的值为:4 可变参数数组i[2]的值为:5
实例演示
输出参数列表中最大的数:
public static void main(String[] args) {
Demo04 demo04 = new Demo04(); // 新建Demo04类对象demo04以调用类方法
demo04.printMax(1,4,5,2,3); // 依次传入5个值
}
public static void printMax(double... numbers){ // 用...省略号指若干个double类型的参数并存入numbers数组中
if(numbers.length == 0){ // numbers是一个包含着double类型数据元素的数组,如果数组的长度为0,说明没有传入参数
System.out.println("No argument passed");
return;
}
// 把numbers数组中第一个数假设为最大值
double result = numbers[0];
// 排序!
for(int i=1; i < numbers.length; i++){ // numbers.length:参数数组的长度
// 遇到更大的数就替换result的值
if(numbers[i]>result){
result = numbers[i];
}
}
System.out.println("The max value is "+result);
}
演示:
The max value is 5.0