1.12.可变参数

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

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;
    }
}
  • 在方法的形参当中,如果除了可变参数以外,还有其他的形参,那么可变参数必须写在最后


二.总结:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值