文章目录
- 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);
}
}
🍎 实现结果:
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匹配可变参数,而判别传参错误呢?
很好理解:这点我们都不知道,编译器也当然没办法自行判断啦