当前位置: 首页 > article >正文

Java方法中的可变参数列表

在Java中,可变参数列表(Variable Argument List)允许方法接受不定数量的参数。可变参数列表通过在方法参数类型后加上三个点(...)来定义。可变参数列表实际上是一个数组,因此可以在方法内部像操作数组一样操作这些参数。

4.4.1 定义可变参数列表

可变参数列表的定义方式如下:

public void methodName(Type... variableName) {
    // 方法体
}

其中,Type是参数的类型,variableName是参数的名称。

4.4.2 使用可变参数列表

下面是一个使用可变参数列表的示例:

public class VariableParameter {
    // 定义一个接受可变参数列表的方法
    public static void printNumbers(int... numbers) {
        for (int number : numbers) {
            System.out.println(number);
        }
        System.out.println("=================================");
    }

    public static void main(String[] args) {
        // 调用方法并传递不同数量的参数
        printNumbers(1);
        printNumbers(1, 2);
        printNumbers(1, 2, 3);
        printNumbers(1, 2, 3, 4);
    }
}

代码解释:

  • 定义可变参数列表: public static void printNumbers(int... numbers) 定义了一个名为 printNumbers 的方法,该方法接受不定数量的 int 参数。
  • 遍历参数: 在方法内部,numbers 实际上是一个 int[] 数组,因此可以使用增强的 for 循环来遍历这些参数。
  • 调用方法: 在 main 方法中,通过传递不同数量的参数来调用 printNumbers 方法。
4.4.3 注意事项
  • 只能有一个可变参数: 一个方法只能有一个可变参数列表,并且它必须是方法参数列表中的最后一个参数。
  • 类型检查: 可变参数列表的类型是固定的,不能在同一个方法中混合使用不同类型的可变参数。
  • 数组转换: 可变参数列表在方法内部实际上是一个数组,因此可以直接使用数组的方法和属性。
  • 可变参数列表作为方法参数的重载问题:接受具体参数个数的重载方法比接受可变参数列表的重载方法优先级高,即可变参数列表所在的方法是最后被访问的。
public class VariableParameterOverload {
    // 方法1:接受一个int参数
    public static void printNumbers(int number) {
        System.out.println("Single number: " + number);
    }

    // 方法2:接受可变参数列表
    public static void printNumbers(int... numbers) {
        System.out.println("Variable arguments: " + java.util.Arrays.toString(numbers));
    }

    public static void main(String[] args) {
        printNumbers(1); // 调用方法1
        printNumbers(1, 2); // 调用方法2
        printNumbers(1, 2, 3); // 调用方法2
    }
}

在这个示例中,printNumbers(int number)printNumbers(int... numbers) 是两个重载的方法。当调用 printNumbers(1) 时,编译器会选择 printNumbers(int number) 方法;当调用 printNumbers(1, 2)printNumbers(1, 2, 3) 时,编译器会选择 printNumbers(int... numbers) 方法。


http://www.kler.cn/a/406294.html

相关文章:

  • 高阶C语言补充:柔性数组
  • wsl安装
  • Specification封装一个类实现链式调用
  • 【java-Neo4j 5开发入门篇】-最新Java开发Neo4j
  • Unity3D基于ECS的游戏逻辑线程详解
  • 数据结构(顺序栈——c语言实现)
  • 【C#】面向对象:矩形类计算周长和面积
  • 【java-Neo4j 5开发入门篇】-最新Java开发Neo4j
  • 《OpenCV 图像缩放、翻转与变换全攻略:从基础操作到高级应用实战》
  • 考虑楼宇空间布局的电力系统集群规划策略【集群划分】
  • 【课堂笔记】隐私计算实训营第四期:“隐语”可信隐私计算开源框架
  • 国外地区经纬度查询免费API接口教程
  • 【深入学习大模型之:微调 GPT 使其自动生成测试用例及自动化用例】
  • Android Compose实现一个文字跑马灯效果控件
  • D76【 python 接口自动化学习】- python 基础之 HTTP
  • 漫步北京小程序构建智慧出行,打造旅游新业态模式
  • box-sizing
  • 了解Redis(第一篇)
  • Ubuntu20.04下安装向日葵
  • 更高效的Java 23开发,IntelliJ IDEA助力全面升级
  • unity中:超低入门级显卡、集显(功耗30W以下)运行unity URP管线输出的webgl程序有那些地方可以大幅优化帧率
  • # issue 4 进程控制函数
  • Leetcode 每日一题 392.判断子序列
  • 前端图像处理(一)
  • webview4/edgewebbrower学习记录——执行js
  • 三层交换机静态路由实验