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); } }
🍎 实现结果:
2 使用可变参数优化代码
✈️ 上述的示例中,我们通过函数的重载写了三个方法:
实现对两数求和;
实现对三数求和;
实现对四数求和。
而我们 通过可变参数,可以极大的优化代码,提高代码的简洁性, 下面这段代码实现的功能和样例一致 (在方法体中,可变参数可以看作数组使用):
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); } }
🍎 实现结果:
3 可变参数注意事项
使用可变参数遵循如下规则:
⭐️ 可变参数的实参可以为 0个或任意多个;
⭐️ 可变参数的实参可以为数组;
⭐️ 可变参数的本质是数组;
⭐️ 一个形参列表只能出现一个可变参数;
⭐️ 可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后,例子如下:
(可行方案)
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匹配可变参数,而判别传参错误呢?
很好理解:这点我们都不知道,编译器也当然没办法自行判断啦