基本概念:
Java允许将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法。就可以通过可变参数实现
基本语法:
访问修饰符 返回类型 方法名 (数据类型… 形参名) {}
快速入门案例:
看一个案例类LnMethod,方法sum【可以计算2个数的和,3个数的和,4,5…】
package review.javaSE_.oop_;
/**
* @author: ln
* @data:
* @description:
*/
public class VarParameter01 {
public static void main(String[] args) {
LnMethod lnMethod = new LnMethod();
System.out.println(lnMethod.sum(1,2,3,4));
}
}
class LnMethod {
//可以使用方法重载
// public int sum(int n1, int n2) {
// return n1 + n2;
// }
//
// public int sum(int n1, int n2, int n3) {
// return n1 + n2 + n3;
// }
//
// public int sum(int n1, int n2, int n3, int n4) {
// return n1 + n2 + n3 + n4;
// }
//上面的三个方法名称相同,功能相同,参数个数不同 -> 使用可变参数优化
//1. int... 表示接受的是可变参数,类型是int,既可以接受多个int(0 - 多个)
//2.使用可变参数时,可以当作数组来使用 即nums可以当作数组
//3.遍历nums求和即可
public int sum(int... nums) {
int result = 0;
for (int i = 0; i < nums.length; i++) {
result += nums[i];
}
return result;
}
}
注意事项和使用细节
1.可变参数的实参可以为0个或者任意多个。
2.可变参数的实参可以为数组
3.可变参数的本质就是数组
4.可变参数可以和普通类型的参数放在一起,但必须保证可变参数在普通参数之后
5.一个形惨列表中只能出现一个可变参数
package review.javaSE_.oop_;
/**
* @author: ln
* @data:
* @description:
*/
public class VarParameterDetail {
public static void main(String[] args) {
T t = new T();
int[] arr = {1,2,3};
t.f1(arr);
}
}
class T {
public void f1(int... nums) {
System.out.println("长度=" + nums.length);
}
//细节: 可变参数可以和普通类型的参数放在一起,但必须保证可变参数在普通参数之后
public void f2(String str, double... nums) {
}
//细节: 一个形惨列表中只能出现一个可变参数
//下面的写法是错误的
// public void f3(int... nums1, int... nums2) {
//
// }
}
练习:
有三个方法,分别实现返回姓名和两门课成绩(总分),返回姓名和三门课成绩(总分),返回姓名和五门课成绩(总分)。封装成一个可变参数的方法。
类名MyMethod,方法名showScore
代码:
package review.javaSE_.oop_;
/**
* @author: ln
* @data:
* @description:
*/
public class VarParameterExercise {
public static void main(String[] args) {
MyMethod myMethod = new MyMethod();
myMethod.showScore("李华",100,100);
myMethod.showScore("小明",100,100,100);
myMethod.showScore("韩梅梅",100,100,100,100,100);
}
}
class MyMethod {
public void showScore(String name, double... score) {
System.out.println("姓名:" + name);
double result = 0;
for (int i = 0; i < score.length; i++) {
result += score[i];
}
System.out.println("总分:" + result);
}
}