【Java中的可变参数(例如:int...)_详细讲解_代码示例+深度刨析】

前言

阅读本文,需要对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. 可变参数的实参可以为数组。

【Java中的可变参数(例如:int...)_详细讲解_代码示例+深度刨析】_第1张图片

正确写法

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.可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后

【Java中的可变参数(例如:int...)_详细讲解_代码示例+深度刨析】_第2张图片

5. 一个形参列表中只能出现一个可变参数

    public void Sum( int x, int... arr1, double... arr2) {
        //报错
    }
    public void Sum(int x, int[] arr1, double... arr2) {
        //正确
    }

尾言

梦想永在凌云意,意气风发。 代码筑就万世基,积沙镇海。

诸君加油(ง •_•)ง

【Java中的可变参数(例如:int...)_详细讲解_代码示例+深度刨析】_第3张图片

你可能感兴趣的:(Java零基础学习,java,开发语言,数据结构)