JAVA 可变参数


可变参数

java 允许将同一个类中多个同名同功能参数个数不同的方法,封装成一个方法。就可以通过可变参数实现

基本语法

访问修饰符 返回类型 方法名(数据类型... 形参名){

}

例如:

类 HspMethod,方法 sum 【可以计算 2 个数的和,3 个数的和 , 4. 5】

package VarParameter_Practice;

public class VarParameter01 {
    public static void main(String[] args) {
        HspMethod hm = new HspMethod();
        int sum = hm.sum(1,2,3);
        System.out.println("sum = " + sum);
    }
}


class HspMethod{
    
    //1.int... 表示接受的可变参数类型,可以接受多个int 0~多
    //2.使用可变参数时可以,可以当做数组来使用,即num 可以当做数组
    //3.遍历nums 求和即可
    public int sum(int... nums){
        int sum = 0;
        System.out.println("接受的参数个数=" + nums.length);
        for (int i = 0; i < nums.length; i++) {
            sum +=nums[i];
        }
        return sum;
    }
}

注意事项和细节

  1. 可变参数的参数可以为0个或者任意多个。

  2. 可变参数的实参可以为数组

  3. 可变参数的本质就是数组

    package VarParameter_Practice;
    
    public class VarParameterDetail {
     private static Object object;
    
     public static void main(String[] args) {
    
         //可变参数的实参可以是数组
         int[] array = {1,2,3};
         T t1 = new T();
         t1.f1(array);
     }
    }
    
    
    class T{
     public void f1(int... nums) {
         System.out.println("长度=" + nums.length);
     }
    }
  4. 可变参数可以和普通类型(非可变参数)的参数一起放在形参列表中,但必须保证可变参数在最后

  5. 一个形参列表中只能出现一个可变参数

package VarParameter_Practice;

public class VarParameterDetail {
    private static Object object;

    public static void main(String[] args) {
        
        //可变参数的实参可以是数组
        int[] array = {1,2,3};
        T t1 = new T();
        t1.f1(array);
        t1.f2(3,4.5,6.0);
    }
}


class T{
    public void f1(int... nums) {
        System.out.println("长度=" + nums.length);
    }
    
    public void f2(double d1,double... nums) {
        System.out.println("长度=" + nums.length);
        System.out.print(d1 + " ");
        for (int i = 0; i < nums.length; i++) {
            System.out.print(nums[i] +" ");
        }
    }
}

练习

题目:有三个方法,分别实现返回姓名和两门课成绩(总分), 返回姓名和三门课成绩(总分),返回姓名和五门课成绩(总分)。 封装成一个可变参数的方法

package VarParameter_Practice;

public class VarParameterExercise {
    public static void main(String[] args) {
        MethodTool tool = new MethodTool();
        System.out.println(tool.showScore("小龙", 78,100,90,99.9));
        System.out.println(tool.showScore("小王", 79,100,90,99.9,99,66));
        System.out.println(tool.showScore("小王", 79,100,90,99.9,99,66));
    }
}


class MethodTool{
    /*
     * 有三个方法,分别实现返回姓名和两门课成绩(总分),
     * 返回姓名和三门课成绩(总分),
     * 返回姓名和五门课成绩(总分)。
     * 封装成一个可变参数的方法
     */
    public String showScore(String name,double... scores) {
        double sum  = 0;
        for (int i = 0; i < scores.length; i++) {
            sum += scores[i];
        }
        String ret = name +"有"+scores.length+ "课的总成绩为:"+ sum;
        return ret;
    }
}

运行效果

image-20220119152411385