目录
一、定义
java允许将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法。可以通过可变参数实现。
二、基本语法
访问修饰符 返回类型方法名(数据类型...形参名){//...是规定好的,不能乱写
}
三、入门案例
求n个整数的和
方法重载的代码
public class VarParameter01 {
public static void main(String[] args){
HspMethod m = new HspMethod();
System.out.println(m.sum(1, 34));
System.out.println(m.sum(10, 22, 89));
}
}
class HspMethod{
/*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;
}
}
方法名和功能相同,参数个数不同的情况下可以用可变参数优化
可变参数代码
public class VarParameter01 {
public static void main(String[] args){
HspMethod m = new HspMethod();
System.out.println(m.sum(1, 34, 56));
System.out.println(m.sum());
}
}
class HspMethod{
public int sum(int... nums){
System.out.println("接收的参数个数=" + nums.length);
int sum = 0;
for(int i = 0; i < nums.length; i++){
sum += nums[i];
}
return sum;
}
}
代码分析:
1.int...表示接受的是可变参数,类型是int,即可以接收多个int(0-多)
2.使用可变参数时,可以当做数组来使用,即把nums当做数组
3.遍历nums求和即可
四、使用细节
1.可变参数的实参个数可以是0个或任意多个
2.可变参数的实参可以是数组
代码说明
public class VarParameterDetail {
public static void main(String[] args){
//可变参数的实参可以是数组
int[] arr = {23, 33, 21};
HspMethod m = new HspMethod();
m.sum(arr);
}
}
class HspMethod{
public void sum(int... nums){
System.out.println("接收的参数个数=" + nums.length);
}
}
传入的实参为数组arr
编译运行结果
也可以传入二维数组,将形参列表变成(int[]... nums)
public class VarParameterDetail {
public static void main(String[] args){
//可变参数的实参也可以是二维数组
int[][] arr2 = {{1, 2, 4},{1, 2, 4},{1, 2, 4},{1, 2, 4}};
A04 a4 = new A04();
a4.f1(arr2);
}
}
class A04{
//二维数组
public void f1(int[]... nums){
System.out.println("长度=" + nums.length);
}
}
运行结果
3.可变参数的本质就是数组
4.可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后
代码
public void f1(double...nums, int n1){//
}
编译错误
5.一个形参列表中只有一个可变参数
编译运行结果
五、练习题
有三个方法, 分别实现返回姓名和两门课成绩(总分),
返回姓名和三门课成绩(总分), 返回姓名和五门课成绩(总分) 。
封装成一个可变参数的方法
public class VarParameterExercise {
public static void main(String[] args){
HspMethod t1 = new HspMethod();
t1.showScore("小明", 34.5, 67.8);
t1.showScore("小红", 64.5, 67.8, 89.4);
t1.showScore("小蓝", 34.5, 67.8, 89.4, 90.3);
t1.showScore("小蓝", 34.5, 67.8, 89.4, 90.3);
}
}
class HspMethod{
/*
有三个方法, 分别实现返回姓名和两门课成绩(总分),
返回姓名和三门课成绩(总分), 返回姓名和五门课成绩(总分) 。
封装成一个可变参数的方法
*/
public void showScore(String s1, double...scores){
double sum = 0;
for(int i = 0; i < scores.length; i++){
sum += scores[i];
}
System.out.println(s1 + "的" + scores.length + "门的成绩总分为" + sum);
}
}