Java——可变参数

一、可变参数

1、介绍

Java的可变参数(Varargs)是一种语法特性,允许一个方法接受不定数量的参数。可变参数的使用通过在参数类型后面添加省略号(...)实现。这使得方法在调用时可以传入不同数量的参数,而不需要为每种情况分别定义方法。

2、具体语法

可变参数的具体语法:

返回类型 方法名(参数类型... 参数名) {// 方法体
}

3、内部具体原理

在方法内部,可变参数实际上被当作一个数组来处理。如果你定义了一个可变参数类型为int...,在方法内部它将被视为一个int[]数组。因此,你可以使用数组的方式来遍历和操作这些参数。

class Calculator {//可以传入任意个int参数的加法方法public int sum(int... nums) {int sum = 0;for(int i = 0; i < nums.length; i++) {sum += nums[i];}return sum;}
}

4、可变参数的规则和注意事项

1)一个方法只能有一个可变参数

public void method(int... numbers, String... strings) {// 编译错误
}

2)可变参数可以与其他参数一起使用,但可变参数必须是方法的最后一个参数

public void method(String str, int... numbers) {// 合法
}public void method(int... numbers, String str) {// 编译错误
}

4)传入数组也可以匹配可变参数

也就是说当我们的一个方法的参数中有可变参数时,当我们在调用这个方法时,传入了一个数组,这个数组的内容就可以与可变参数匹配。

public class Test {public static void main(String[] args) {Calculator myCalculator = new Calculator();int[] arr = {1, 2, 3};int res = myCalculator.sum(arr);System.out.println(res);}
}class Calculator {//可以传入任意个int参数的加法方法public int sum(int... nums) {int sum = 0;for(int i = 0; i < nums.length; i++) {sum += nums[i];}return sum;}
}

运行结果:

但是如果要以数组为参数传入的话则只能给这个可变参数传入这个数组,不能再传入其他整型。例如下面就是错的:

对于这个可变参数只能传入一个数组。

二、可变参数使用

1、计算多个int型数据的乘积

public class Test {public static void main(String[] args) {Calculator myCalculator = new Calculator();int res = myCalculator.getProduct(1, 2, 3);System.out.println("result of 1 * 2 * 3 = " + res);}
}class Calculator {//可变参数public int getProduct(int... nums) {int product = 1;for(int i = 0; i < nums.length; i++) {product *= nums[i];}return product;}
}

运行结果:

2、Java 中的 printf 方法

是的,Java中的printf方法使用了可变参数。printf方法是PrintStream类的一部分,通常通过System.out调用,用于格式化输出。以下是printf方法的一个常见签名:

public PrintStream printf(String format, Object... args)

后面就是可变参数,它的可变参数也是遵循上面的规则的。

我们在使用 printf 方法时,可以传入不同数目个变量,然后通过最前面的字符串格式化打印后面的变量的值。

public class Main {public static void main(String[] args) {int age = 25;String name = "Alice";double score = 95.5;System.out.printf("Name: %s, Age: %d, Score: %.2f%n", name, age, score);System.out.printf("Name: %s, Age: %d", name, age);}
}

可以发现这里可以传入不同数目的参数。

具体实现就是通过可变参数。

在Java中,printf方法的可变参数使用的是Object... args,这意味着你可以传入任意数量的参数,这些参数的类型可以是任何对象类型或者其子类。因为所有类型在Java中最终都继承自Object类,所以可以传入不同类型的参数。

Java中的所有类都继承自Object类,因此任何类型的对象都可以作为Object类型的参数传递。这是Java的继承和多态性特性。基本数据类型(如intdouble等)在需要的时候会自动装箱为其对应的包装类(如IntegerDouble等)。这些包装类都继承自Object,所以也可以作为参数传递。

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

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

相关文章

Ubuntu20.04用NetworkManager的 nmcli connection modify 连接的名称或UUID 来设置IPV4 笔记240619

用NetworkManager的 nmcli connection modify 连接的名称或UUID ipv4.address 来设置IPV4 用NetworkManager的 nmcli connection modify 连接的名称或UUID ipv4.address 来设置IP 的模板 只设置修改IP 覆盖原有设置: ipv4.addresses或ipv4.addr或ipv4.a NameOrUuidOfConnec…

leetcode 二分查找·系统掌握 统计有序矩阵中的负数

题目&#xff1a; 给你一个 m * n 的矩阵 grid&#xff0c;矩阵中的元素无论是按行还是按列&#xff0c;都以非严格递减顺序排列。 请你统计并返回 grid 中 负数 的数目。 题解&#xff1a; 一种可行的解题思路是找出每一行中负数的个数再相加&#xff0c;又因为每一行单调递…

虚拟存储(Linux挂载点合并)

简介 在 Linux 中你有 3 块硬盘(或分区)分别为 100G、200G 和 300 G,如何在一个统一的路径下访问 600G 的视频文件夹呢?并且任何一个磁盘数据的损坏是不能影响其他两个磁盘中的数据,也不影响其他磁盘的正常访问。 相信大多数用户会想到几种解决办法: 买个更大的硬盘 ̄□ ̄…

Git 克隆 GitHub 仓库时遇到了 SSL 证书问题

fatal: unable to access GitHub - xxxxxxxxxxx: SSL certificate problem: unable to get local issuer certificate 使用 HTTP 代替 HTTPS: 如果 SSL 证书问题无法解决&#xff0c;您可以尝试使用 HTTP 克隆仓库&#xff08;不推荐&#xff0c;因为不安全&#xff09;。但请注…

Android device/xxx/system/common/overlay编译产物

MTK 如下代码编译的产物在 framework-res.apk 编译配置文件在device/mediatek/system/common/目录下的Android.bp device/mediatek/system/common/overlay/telephony/frameworks/base/core/res/res/values-mcc655-mnc01/config.xml 在Android U上面还在overlay目录中进行了产…

图像的高频和低频细节

在图像处理和计算机视觉中&#xff0c;"高频"和"低频"是用来描述图像中不同类型细节的术语。这些术语源自信号处理领域&#xff0c;其中频率的概念用于描述信号随时间变化的&#xff0c;但在图像处理中&#xff0c;它们被用来描述图像随空间变化的&#xf…

python是TIOBE编程语言排名第一的编程语言,它有什么优点?它的使用场景有哪些?用python打印数字1--100,用python打印九九乘法表怎么写?

Python是TIOBE编程语言排行榜排名第一的编程语言 。 python是一种解释性、交互式、面向对象的跨平台的语言。 python设计者及名称由来 Guido van Rossum 荷兰人---吉多范罗苏姆&#xff0c;是 Python 编程语言的最初设计者&#xff0c;在 Python 社区一直担当终身仁慈独裁者&…

教你如何安装 IntelliJ IDEA

安装 IntelliJ IDEA 的步骤通常如下&#xff0c;这里提供的是基于 Windows 系统的安装指南。 下载 IntelliJ IDEA 1. 访问 JetBrains 官方网站&#xff1a;[https://www.jetbrains.com/idea/download/](Download IntelliJ IDEA – The Leading Java and Kotlin IDE) 2. 选择适…

vue+echarts实现tooltip轮播

效果图如下&#xff1a; 实现步骤如下&#xff1a; 定义一个定时器 timer:null, len: 0,页面一加载就清空定时器&#xff0c;此操作是为了防止重复加载时会设置多个定时器在setOption后设置定时器 this.myChart.clear() this.myChart.setOption(option); this.autoShowTool…

java 面试题--基础

文章目录 基础java SE 、 EE 、 ME 的区别jdk 和 jre 区别&#xff1f;java 的日志级别基本数据类型 特性关键字finalabstractsuperswitchfortry catch 接口和抽象类的区别接口抽象类适用场景 类的加载循序静态代码块 传参问题访问修饰符运算符 反射java 里的应用为什么反射的性…

禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》Chapter 10插图

禹晶、肖创柏、廖庆敏《数字图像处理&#xff08;面向新工科的电工电子信息基础课程系列教材&#xff09;》 Chapter 10插图

YOLOv8旋转目标检测Yolov8n-obb详细实例+rolabelimg

一、Yolov8环境搭建 首先创建虚拟环境下载安装&#xff08;其实就是yolov8的环境&#xff09;再大概写一下步骤&#xff0c;没有想详细的看本人另外一篇&#xff1a;YOLOv8环境搭建_yolov8环境配置-CSDN博客 1、下载安装anaconda 2、创建虚拟环境 conda create -n my_yolov8…

二分查找算法模板

在算法题中&#xff0c;二分查找是一个很基础的能力&#xff0c;但是很多情况下都有可能因为一些小条件导致整题的错误&#xff0c;所以我们需要学习并记忆正确的写法&#xff0c;本篇列出了三种情况下的写法 闭区间写法 int lower_bound(vector<int> &nums, int ta…

【Gradio】Chatbot | 如何使用 Gradio Blocks 创建自定义聊天机器人

简介 重要提示&#xff1a;如果您刚开始接触&#xff0c;我们建议使用 gr.ChatInterface 来创建聊天机器人——它是一个高级抽象&#xff0c;使得可以快速创建漂亮的聊天机器人应用程序&#xff0c;往往只需一行代码。在这里了解更多信息。 本教程将展示如何使用 Gradio 的低级…

vue3中实现3D地图——three.js

需求点 地图区域大小随着父盒子大小变动&#xff0c;窗口缩放自动适配每个区域显示不同颜色和高度&#xff0c;描边每个区域显示名字label和icon点击区域改变其透明度&#xff0c;并且弹窗显示信息窗口点击点也可以可以自由放大缩小&#xff0c;360度旋转 包 npm install d3^…

单链表的插入及销毁

分数 5 作者 李卫明 单位 杭州电子科技大学 1.1编写程序&#xff0c;建立2个带头结点单链表&#xff0c;输入若干整数将正整数插入第1个单链表&#xff0c;将负整数插入第2个单链表&#xff0c;插入前和插入后单链表保持递增或相等次序&#xff0c;显示2个单链表&#xff0c…

背景渐变动画登录页

b站视频演示效果: 效果图: 完整代码: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>背景…

Python基础-函数

Python函数 函数是组织好的&#xff0c;可重复使用的&#xff0c;用来实现单一&#xff0c;或相关联功能的代码段。 函数能提高应用的模块性&#xff0c;和代码的重复利用率。你已经知道Python提供了许多内建函数&#xff0c;比如print()。但你也可以自己创建函数&#xff0c…

大模型商业化:李开复向左,张亚勤向右

文&#xff5c;白 鸽 “零一万物坚决做To C&#xff0c;不做赔钱的To B&#xff0c;要做能赚钱的To B。”2024年6月14日&#xff0c;在智源大会上&#xff0c;零一万物创始人李开复如此坚定地说道。 而与之相对&#xff0c;中国工程院院士、清华大学智能产业研究院&…

@property 详解

定义 python装饰器接受一个可调用对象作为输入&#xff0c;并返回一个新的可调用对象 比较 函数装饰器类装饰器方法装饰器参数接受函数作为参数接受类作为参数接受方法&#xff08;类的函数成员&#xff09;作为参数返回值返回一个新函数返回一个新类&#xff08;通常是原始…