Java方法之可变个数形参(Varargs)学习笔记

news/2025/10/9 9:42:22/文章来源:https://www.cnblogs.com/roadtojava/p/19130497

使用场景

在调用方法时,可能会出现形参的类型是确定的,但是形参的个数是不确定的。此时,使用可变个数形参的方法。

格式

(参数类型... 参数名)

说明

  1. 可变个数形参方法的调用,针对形参的赋值个数,可以为:0个、1个或多个。
  2. 可变个数的形参方法在同一个类中,同名的多个方法之间可以构成方法的重载(类型相同的数组不构成重载)
  3. 可变个数的形参在一个方法的形参列表中只出现一次,且必须声明在形参列表的最后

代码范例

基础使用示例

public class VarargsExample {// 1. 基本可变参数方法public static void printNumbers(int... numbers) {System.out.println("接收到的数字个数: " + numbers.length);for (int num : numbers) {System.out.print(num + " ");}System.out.println();}// 2. 可变参数与固定参数结合public static void printMessageWithNumbers(String message, int... numbers) {System.out.print(message + ": ");for (int num : numbers) {System.out.print(num + " ");}System.out.println();}// 3. 零个参数的情况public static void demonstrateZeroArgs() {printNumbers(); // 不传递任何参数printMessageWithNumbers("没有数字"); // 只传递固定参数}// 4. 方法重载示例public static void processData(String... strings) {System.out.println("处理字符串数据: " + String.join(", ", strings));}public static void processData(int... numbers) {System.out.println("处理数字数据: " + Arrays.toString(numbers));}// 5. 与数组参数的区别(不能构成重载)// 以下两个方法不能同时存在,因为编译后会冲突// public static void conflictExample(String... strs) {}// public static void conflictExample(String[] strs) {} // 编译错误
}

实际应用场景示例

public class PracticalExamples {// 场景1: 日志记录 - 可以接受任意数量的日志参数public static void log(String level, String... messages) {String timestamp = LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_TIME);System.out.println("[" + timestamp + "] [" + level + "] " + String.join(" ", messages));}// 场景2: 数学计算 - 计算多个数字的和public static double sum(double... numbers) {double total = 0;for (double num : numbers) {total += num;}return total;}// 场景3: 字符串处理 - 连接多个字符串public static String concatenate(String delimiter, String... strings) {return String.join(delimiter, strings);}// 场景4: 参数验证 - 检查多个条件public static void validateArguments(String name, int age, String... requirements) {if (name == null || name.trim().isEmpty()) {throw new IllegalArgumentException("姓名不能为空");}if (age < 0 || age > 150) {throw new IllegalArgumentException("年龄无效");}for (String req : requirements) {if (req == null || req.trim().isEmpty()) {throw new IllegalArgumentException("要求参数不能为空");}}}
}

测试类展示各种调用方式

public class VarargsTest {public static void main(String[] args) {// 1. 不同数量的参数调用PracticalExamples.log("INFO", "系统启动成功");PracticalExamples.log("DEBUG", "用户登录", "用户ID: 123", "时间: 2024-01-01");PracticalExamples.log("ERROR", "数据库连接失败", "重试次数: 3");// 2. 数学计算示例System.out.println("和1: " + PracticalExamples.sum()); // 0个参数System.out.println("和2: " + PracticalExamples.sum(5)); // 1个参数System.out.println("和3: " + PracticalExamples.sum(1, 2, 3, 4, 5)); // 多个参数// 3. 字符串连接示例String result1 = PracticalExamples.concatenate(", ", "Java", "Python", "C++");String result2 = PracticalExamples.concatenate(" - ", "开始", "进行中", "结束");System.out.println("连接结果1: " + result1);System.out.println("连接结果2: " + result2);// 4. 参数验证PracticalExamples.validateArguments("张三", 25, "必须有邮箱", "必须有手机号");// 5. 方法重载调用VarargsExample.processData("Hello", "World");VarargsExample.processData(1, 2, 3, 4);// 6. 数组传递给可变参数int[] numbers = {10, 20, 30};VarargsExample.printNumbers(numbers); // 可以直接传递数组String[] messages = {"消息1", "消息2", "消息3"};PracticalExamples.log("INFO", messages); // 数组作为可变参数}
}

输出结果示例

[14:30:25.123] [INFO] 系统启动成功
[14:30:25.124] [DEBUG] 用户登录 用户ID: 123 时间: 2024-01-01
[14:30:25.125] [ERROR] 数据库连接失败 重试次数: 3
和1: 0.0
和2: 5.0
和3: 15.0
连接结果1: Java, Python, C++
连接结果2: 开始 - 进行中 - 结束
处理字符串数据: Hello, World
处理数字数据: [1, 2, 3, 4]
接收到的数字个数: 3
10 20 30 
[14:30:25.126] [INFO] 消息1 消息2 消息3

注意事项

  1. 只能有一个可变参数:一个方法中只能有一个可变参数
  2. 必须在最后:可变参数必须是方法的最后一个参数
  3. 性能考虑:频繁调用时,每次都会创建新数组,可能影响性能
  4. 与重载的配合:要小心设计重载方法,避免调用歧义

这些范例展示了可变参数在实际开发中的常见应用场景,帮助理解其灵活性和便利性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/932369.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

主流TOP10的需求管理工具测评,教你怎么用才最高效! - RAIN

主流TOP10的需求管理工具测评,教你怎么用才最高效!一、前言:选对需求管理工具,先抓住这5个核心要点 做需求管理,说白了就是把“老板想要什么”“客户需要什么”,准确地翻译成“团队该做什么”。这个环节一旦出问…

精准对决:Snipaste 与 FastStone Capture 截图工具优劣势深度剖析

一、引言:聚焦核心需求的工具选型 在日常办公与专业创作中,截图工具的选择直接影响效率 —— 有人需要 “轻量快速,即截即用”,有人则追求 “专业深度,功能全面”。Snipaste 以极简贴图功能圈粉无数,FastStone C…

网站权重2的网站怎样设计卖奖的网站

在设计数据库的时候&#xff0c;是得需要通过外键的形式将各个表进行连接。 原先的表是这样的 要想更改成这样&#xff1a; 下面是操作步骤&#xff1a; 有两张表是关联的 # 在 models.py 里创建class Department(models.Model):"""部门表""&quo…

vs code python 环境移植

相信初学者都有这样的困惑吧:在自己电脑写好的python程序,如何在车间没网的情况下调试? 就是需要将自己编程电脑的python环境(vs code),移植到另一台电脑去。(两台电脑都是win10系统) 1.新电脑安装python软件(…

第六届信息科学与并行、分布式处理国际学术会议(ISPDS 2025)

第六届信息科学与并行、分布式处理国际学术会议(ISPDS 2025) 2025 6th International Conference on Information Science, Parallel and Distributed Systems 第六届信息科学与并行、分布式处理国际学术会议(ISPDS…

MATLAB遗传算法优化RBF网络连接权与网络结构的实现方法

一、核心流程设计网络结构参数化隐层节点数:编码为二进制染色体(如5位可表示0-31个节点) 中心点与宽度:实数编码,每个个体包含中心坐标(xi,yi)和宽度σi 连接权值:实数编码,输出层权重矩阵W∈RMN(M为隐层节点数…

网站建设帮助中心网站开发毕业设计ppt

在当前技术飞速发展的时代&#xff0c;软件开发的复杂度也在不断提高。传统的开发方式往往将一个系统做成整块应用&#xff0c;一个小的改动或者一个小功能的增加都可能引起整体逻辑的修改&#xff0c;从而造成牵一发而动全身的情况。为了解决这个问题&#xff0c;组件化开发逐…

2025 年热缩管制造厂家最新推荐排行榜:氟橡胶 / 双壁 / 线缆标识 / 防滑花纹 / DR 耐油橡胶 / PVDF / 航插用 / 军用热缩管优质企业品牌全面盘点

在电子、电力、通信等关键行业中,热缩管作为保障设备绝缘防护与稳定运行的核心部件,其品质好坏直接关系到整个设备系统的安全与寿命。但当前热缩管市场品牌繁杂,既有深耕多年的老牌企业,也有大量新兴品牌涌入,产品…

10-9

中缀式: a ?b 左根右 后缀式: ab?左右根 中缀式转后缀式,乘除先右后左 后缀转中缀,进栈,遇到符号,上作为b,下作为a 优先级 与大于或

2025 建筑工程施工总包公司最新推荐榜:揭秘 5 家优质企业,以质量管控与创新实力引领行业发展

当前建筑工程行业正处于高质量发展转型关键期,市场对工程质量、环保标准与管理效率的要求持续升级,但行业内仍存在资质参差不齐、工期延误、隐性成本突出等问题,让业主与开发商在选择施工总包企业时面临诸多困扰。尤…

青岛做网站找什么公司试玩网页游戏

文章目录 前言环境依赖homebrewpython3下载stable-diffusion-webui webui模型准备模型网站 中文页面设置提示词转汉语转英文controlnet安装controlnet模型下载 结尾 前言 目前&#xff0c;市面上已经出现了很多用Ai 绘图制作的作品&#xff0c;用于自媒体或者商业等。例如表情…

电子商务网站建设与维护试卷微信公众平台怎样开发

目录 相关系列文章前言一、定义二、术语简介三、协议的组成要素四、网络层次划分五、常见网络协议划分六、常用协议介绍&#xff08;一&#xff09;TCP/IP&#xff08;二&#xff09;HTTP协议&#xff08;超文本传输协议&#xff09;&#xff08;三&#xff09;SSH协议 相关系列…

2025 年板材厂家最新推荐排行榜:胖胖熊等六大优质品牌深度解析,助您选对环保、耐用、高性价比装修板材ENF级/环保/密度/净化/零醛添加/装修板材厂家推荐

在如今的建筑与家居装饰市场中,板材作为核心材料,其品质直接影响居住体验与健康安全。随着消费者对环保、耐用、美观等需求的提升,市场上板材品牌愈发繁杂,质量参差不齐,部分品牌存在虚假宣传、甲醛超标等问题,让…

2025 年最新推荐:高低温 / 快速温变 / 三综合 / 淋雨 / 沙尘 / 环境 / 高低温冲击 / 高低温湿热试验箱厂家排行榜

在工业生产与科研创新高速发展的 2025 年,试验箱作为保障产品质量、推动技术研发的核心设备,市场需求持续攀升,但企业选型难题却愈发凸显。市场上品牌繁杂,部分产品精度不足、功能单一,难以满足电子、汽车、新能源…

2025 年人源化小鼠公司最新推荐榜:临床前 CRO 型 / 基因人源化 / 精准医疗型 / 创新型企业综合评选 TOP 名单

随着生物医药研究向精准化、深度化推进,人源化小鼠作为模拟人类生理病理特征的核心工具,其质量与适配性直接影响研究成果的可靠性与转化效率。当前市场上,人源化小鼠品牌数量激增,但产品质量、技术实力、服务能力差…

Azure Functions Linux Consumption 托管计划退役及迁移指南

微软宣布Azure Functions Linux Consumption托管计划将于2028年9月30日退役。建议用户迁移至Flex Consumption计划,该计划提供更快的扩展、高级网络、冷启动缓解和并发控制等功能。退役公告:Azure Functions Linux C…

网站建设价格标准报价单中国设计师网上家园

近日&#xff0c;在国家重点研发计划“新型无液氦脑磁图系统研发”项目支持下&#xff0c;首都医科大学附属北京天坛医院季楠教授团队完成全球首例无液氦脑磁图运动功能区定位辅助下的胶质瘤切除手术。 手术对一例肿瘤累及运动功能区的年轻女性在术前分别利用无液氦脑磁图仪和功…

photoshop网站视觉设计步骤陈铭生简介

<article>标签定义外部的内容。比如来自一个外部的新闻提供者的一篇新的文章&#xff0c;或者来自 blog 的文本&#xff0c;或者是来自论坛的文本。亦或是来自其他外部源内容。 HTML5:<article></article> HTML4:<div></div><aside>标签定…

完整教程:搭建nginx的负载均衡

完整教程:搭建nginx的负载均衡pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&quo…

2025 年蝶阀公司最新推荐:全金属硬碰硬 / 高压 / 美标 / 双偏心等各类蝶阀优质厂家榜单及选择指南

在工业流体控制体系中,蝶阀作为关键的截断与调节设备,其品质直接决定了生产系统的运行效率与安全。当前蝶阀市场品牌繁杂,既有深耕多年的老牌企业,也有新兴崛起的新秀,产品质量、技术水平与服务能力差异显著,给企…