文章目录

  • 1 Java 可变参数简介
  • 2 使用可变参数优化代码
  • 3 可变参数注意事项
  • 写在最后



1 Java 可变参数简介

🍎 Java 允许将同一个类中 多个同名同功能但参数个数不同的方法封装成一个方法。其基本语法如下:

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

🍑 那么可变参数究竟有什么用?别急接下来我们看一个案例:

利用方法的重载,在Method类里声明三个方法 sum,用于求2 ~ 4个数的和,并输出。在主函数中调用并测试

😎 话不多说,三下五除二代码就搞定了:

class Method{
    // 两数之和
    public void sum(int a, int b){
        System.out.println("两数之和: " + (a + b));
    }
    // 三数之和
    public void sum(int a, int b, int c){
        System.out.println("三数之和: " + (a + b + c));
    }
    // 四数之和
    public void sum(int a, int b, int c, int d){
        System.out.println("四数之和: " + (a + b + c + d));
    }
}

// 主类
public class Main {
    public static void main(String[] args) {
        Method my = new Method();
        my.sum(1,2);
        my.sum(1,2,3);
        my.sum(1,2,3,4);
    }
}

🍎 实现结果:

java可变数量的参数_数组


2 使用可变参数优化代码

✈️ 上述的示例中,我们通过函数的重载写了三个方法:

  1. 实现对两数求和;
  2. 实现对三数求和;
  3. 实现对四数求和。

而我们 通过可变参数,可以极大的优化代码,提高代码的简洁性, 下面这段代码实现的功能和样例一致 (在方法体中,可变参数可以看作数组使用):

class Method{
    // n数之和
    public void sum(int... nums){
        // 可变参数可以当作数组使用
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
        }
        System.out.println(nums.length + "数之和为: " + sum);
    }
}
// 主函数
public class Main {
    public static void main(String[] args) {
        Method my = new Method();
        my.sum(1,2);
        my.sum(1,2,3);
        my.sum(1,2,3,4);
    }
}

🍎 实现结果:

java可变数量的参数_java_02


3 可变参数注意事项

使用可变参数遵循如下规则:

  1. ⭐️ 可变参数的实参可以为 0个或任意多个;
  2. ⭐️ 可变参数的实参可以为数组;
  3. ⭐️ 可变参数的本质是数组;
  4. ⭐️ 一个形参列表只能出现一个可变参数;
  5. ⭐️ 可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后,例子如下:

(可行方案)

public void method(String s, int... nums){
	// 该声明可行
}

(错误示范)

public void method(int... nums, String s){
	// 该声明不可行
}

为什么第二种编译器不通过呢?
我们可以思考一下,如果把代码更改成这样:

public void method(int... nums, int x){
	// 该声明不可行
}

那我们在调用该方法时, 编译器就没有办法区分传入的参数到底匹配哪个参数。比如 method(1,2,3) 这里的1,2是可变参数匹配nums,3匹配int,还是1,2,3匹配可变参数,而判别传参错误呢?
很好理解:这点我们都不知道,编译器也当然没办法自行判断啦