前言
阅读本文,需要对Java中的重载有一定了解。
欢迎阅读作者的
五分钟了解和上手Java重载
在计算机程序设计,一个可变参数函数是指一个函数拥有不定引数,即是它接受一个可变数目的参数。简单来说,就是函数的参数个数可变,参数类型不定的函数。
对于我们来说,它的概念毫无用处,我们只需要知道如何在程序中使用。
访问修饰符 返回类型 方法名(数据类型… 形参名) { }
代码示例
public int Sum(int... nums) {
return nums.length;
}
看到此处,许多人可能还是一头雾水,心想这作者写的什么?
别急,让我们先看一段代码
public class Test {
public int Sum(int x, int y) {
return x + y;
}
public int Sum(int x, int y, int z) {
return x + y + z;
}
public static void main(String[] args) {
Test test = new Test();
int a = test.Sum(1,2);
int b = test.Sum(1,2,3);
System.out.println(a);
System.out.println(b);
}
}
不难看出,这是两个重载方法
那么问题来了,我要是 4 个数连加呢?5个数连加呢?6 个数连加呢?7 个数连加呢?
//写起来虽简单,但耗时间,而且无意义
public int Sum(int x, int y, int z, int a, int b, int c, int d) {
return x + y + z + a + b + c + d;
}
因此,Java中允许将同一类中多个同名同功能但参数个数不同的方法,封装成一个方法。
而这就可以通过可变参数来实现。
下面来看一段代码
public class Test {
// public int Sum(int x, int y) {
// return x + y;
// }
// public int Sum(int x, int y, int z) {
// return x + y + z;
// }
public int Sum(int... arr) {
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
public static void main(String[] args) {
Test test = new Test();
int a = test.Sum();
int b = test.Sum(1,2);
int c = test.Sum(1,2,3);
int d = test.Sum(1,2,3,4,5,6,7);
System.out.println(a);//0
System.out.println(b);//3
System.out.println(c);//6
System.out.println(d);//28
}
}
从中可以看出,利用 int… arr 实现了 0 ~ 7 个数的相加,大大减小了我们写连加重载方法的工作量和重复代码的冗余。
同时,细心的读者可能看出该段代码中的 arr.length 和 arr[i] ,而这两种形式只会在数组中出现,因此可得可变参数的本质就是数组。
总结:
1. int… 表示接受的参数为可变参数,类型是 int ,即可以接受 0 ~ N 个int,相当于传入一个数组。
2. 可变参数可以当作数组来使用,即参数名即为数组名。
1. 可变参数的实参可以为0个或任意多个。
2. 可变参数的本质就是数组.
这两点在上面已经讲解过。
3. 可变参数的实参可以为数组。
正确写法
public class Test {
public int Sum(int[]... arr) {
int sum = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
sum += arr[i][j];
}
}
return sum;
}
public static void main(String[] args) {
Test test = new Test();
int[] arr1 = new int[]{1};
int[] arr2 = new int[]{1 ,2};
int[] arr3 = new int[]{1, 2, 3};
int[] arr4 = new int[]{1, 2, 3, 4};
int a = test.Sum(new int[]{},arr1, arr2,arr3,arr4);//也可以直接new个数组
System.out.println(a);//20
}
}
4.可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后
5. 一个形参列表中只能出现一个可变参数
public void Sum( int x, int... arr1, double... arr2) {
//报错
}
public void Sum(int x, int[] arr1, double... arr2) {
//正确
}
梦想永在凌云意,意气风发。 代码筑就万世基,积沙镇海。
诸君加油(ง •_•)ง