一.案例:可变参数的练习
1.题目:

2.求n个数据的和以前的解法:
package com.itheima.a04args;
public class ArgsDemo2 {
public static void main(String[] args) {
//计算n个数据的和
int[] arr={1,2,3,4,5,6,7,8,9,10};
int sum = getSum(arr);
System.out.println(sum); //运行结果为55
}
//定义求n个数据的和的方法
/*由于无法得知有几个数据求和,因此形参定义为数组*/
public static int getSum(int[] arr){
int sum=0;
for (int i : arr) { //i代表数组中的元素,不是索引
sum = sum + i;
}
return sum;
}
}
但上述写法较繁琐,因为要求数据的和,不仅要定义数组,还要调用方法求数组里的数据的和,因此可以进行优化,如下:
3.使用可变参数求n个数据的和:
JDK5中加入了可变参数这一特性, 可变参数:方法形参的个数是可以发生变化的,可以是0、1、2...个,多少个参数都无所谓; 可变参数格式:属性类型...名称, 例如:int...args
->可变参数的底层就是一个数组,只不过不需要我们自己创建了,Java会帮我们创建好
package com.itheima.a04args;
public class ArgsDemo3 {
public static void main(String[] args) {
/*此时利用getSum方法求和就无需数组了,因为getSum方法的形参使用了可变参数,
可变参数对参数个数没有要求,实参放多少个参数都可以*/
int sum = getSum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
System.out.println(sum); //运行结果为55
}
/*在底层中Java会创建一个数组,再把实参1,2,3,4,5,6,7,8,9,10放入这个数组中,
然后再把数组传递给int...args,因此args就是一个数组*/
public static int getSum(int... args) {
int sum = 0;
for (int arg : args) {
sum = sum + arg;
}
return sum;
}
}
4.可变参数的小细节:

-
在方法的形参中最多只能写一个可变参数->原因:可以把可变参数理解为一个大胖子,有多少吃多少,以上述图片为例,调用getSum函数时,可以认为int...args1把实参1,1,2,3,4,5全部吞入,int...args2并没有得到参数,此时不符合题意
package com.itheima.a04args;
public class ArgsDemo4 {
public static void main(String[] args) {
getSum(1,1,2,3,4,5);
/*由于getSum的形参中第一个形参int a只接收一个参数,所以实参中第一个数据就一定给int a,
剩下只有可变参数int...args,因此剩下的实参都给int...args*/
}
public static int getSum(int a,int...args){
return 0;
}
}
package com.itheima.a04args;
public class ArgsDemo4 {
public static void main(String[] args) {
getSum(1,1,2,3,4,5);
/*getSum方法的第一个形参为int...args即可变参数,把可变参数理解为一个大胖子,有多少吃多少,
因此就会把实参1,1,2,3,4,5全部吞掉,
导致getSum方法的第二个形参int a没有数据可以接收*/
}
public static int getSum(int...args,int a){
return 0;
}
}
-
在方法的形参当中,如果除了可变参数以外,还有其他的形参,那么可变参数必须写在最后
二.总结:

3889

被折叠的 条评论
为什么被折叠?



