java 可变参数

          vararg的意思是变量参数,它是与Java语言语法非常不同的一个概念。常见情况下,我们通过限制输入参数的个数和类型、返回数据类型和抛出的异常来定义方法签名来与方法的调用者实现契约。使用动态参数特性,我们可以部分的克服该限制,使得签名变得动态化。你可能会说动态签名并不新鲜。如下两点你已经使用过多次来避免添加或删除方法签名中参数对客户端调用的影响。

  • 使用数组或集合作为输入参数
  • 使用对象将输入参数的属性进行封装

现在Java语言自身提供了动态参数特性以支持变量输入参数。当然它不是在任何场景下都非常的自然,但是可以被用到很多情况下。

  

Java编程人员常常需要为方法定义一个包含多个值的参数。这时可以采用List或数组的形式,如下例所示。

public int add(int[] list) {

int sum = 0;

for (int i=0; i < list.length; i++) {

sum += list[i];

}

return sum;

}

 

也可以将它实现为几个重载的方法,每个方法接受不同数量的int参数。这样做有时可以令方法更容易使用,因为调用代码不需要首先创建一个数组。

 

public int add(int a, int b) {

return a + b;

}

public int add(int a, int b, int c) {

return a + b + c;

}

public int add(int a, int b, int c, int d) {

return a + b + c + d;

}

 

如果只有少量值,这对于调用代码更为方便,因为现在可以使用add(12,14,16)来代替add(new int[] {12,14,16})。但是,编写类似这样的方法存在问题,需要为每种可能的参数组合编写不同版本的方法。如果希望在方法的使用方式上具有最大的灵活性则与其创建一个庞大的具有上千个方法的类,不如对重载的方法接受的参数数量进行很小的限制。

在Java 5中,可以编写一个方法以使它允许可变数量的参数并让编译器完成将列表包装到一个数组中的操作。虽然内部仍是处理数组,但此时的编译器已隐藏了细节。以下的代码使用可变参数(vararg)重写了add方法。

public int add(int... list) {

int sum = 0;

for (int item : list) {

sum += item;

}

return sum;

}

 

注意,那些奇怪的圆点正是可变参数的实际语法!并且,由于这种改动要用到Java 5,我们也可以趁机使用Java 5增强的for循环语法。一旦按照这种方式编写了方法,可以使用实际数量的参数来调用它!此外,还可以传递一个作为参数的数组(但不允许是List或Collection对象):

add(1,3,5,7,9,11,13,15,17,19,21,23,25);

add(new int[] {12,14,16});

需要注意的是当定义一个参数列表时该语法只能使用一次,并且它必须是最后一项。以下的代码不能正常运行,因为可变参数不是最后一项:

public void badMethod(int... data, String comment) { } // wrong!

必须将此代码改写成以下形式:

public void goodMethod(String comment, int... data) { }

在一些情况下,在方法定义中使用可变参数可以使方法更简便。这在参数列表包含字面(硬编码)值的情况下尤其如此,如上面的示例中给出的int值。

<!-- page -->

 

【Java】Java反射调用可变参数的方法 1.概述 因为要Java反射调用可变参数的方法,所以参考了这篇文章:https://www.cnblogs.com/huqingchen/p/5979936.html 但是测试过程中,有一点我不明白,就是反射调用可变参数的方法时,为什么一定要保证传入的参数数组长度为1, 然后如下 package com.java.reflect.demo; public class BaseObject { public void getObjectName() { System.out.p. 阅读详情

相关推荐

深度学习---双层神经网络中矩阵的运算及其含义记录

深度学习---双层神经网络中矩阵的运算及其含义记录神经网络的正向传播与反向传播正向传播第一层的权重矩阵第一层的输入矩阵Z^1^ = W^1^X^1^ + b^1^A^1^ = σ(Z^1^)第二层的权重矩阵第二层的输入矩阵Z^2^ = W^2^A^1^ + b^2^反向传播dz^2^ = A^2^ - Ydw^2^ = 1/n dz^2^A^1T^db^2^ = 1/n np.sum(dz^2...

qq_43228441的博客 3747

练习-Java类和对象之可变参数

平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。可在右侧“测试结果”区查看具体的测试集详情。本关任务:定义一个名为 add 的静态方法,返回值为 int,参数数量可变,且为 int,将这些参数相加后返回。仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码。开始你的任务吧,祝你成功!

千浔的博客 1526

G2O (General Graph Optimization)入门及简单使用

g2o全称是General Graph Optimization,也就是图优化,我们在做SLAM后端或者更加常见的任何优化问题(曲线拟合)都可以使用G2O进行处理。

晓晨的博客 1万+

java学习之路 之 面向对象编程-可变个参数-练习题

public class VarArgsTest { /* public static int avg(int a, int b) { return (a + b) / 2; } public static int avg(int a, int b, int c) { return (a + b + c) / 3; } public static int avg

OnlyLove_longshao的博客 1390

学Simulink——基于直流电机的建模与控制场景实例:他励直流电机的起动与制动过程仿真

直流电机在工业控制、电动车辆、自动化设备中广泛应用。其中,他励直流电机(Separately Excited DC Motor)因其励磁绕组与电枢绕组分别供电,具有良好的调速性能和启动特性,常用于需要平稳启动和精确控制的场合。在实际应用中,电机的启动过程和制动过程对电网、机械系统以及电机本身都具有重要影响。因此,仿真分析他励直流电机的启动与制动特性,是电机控制设计的重要环节。本文将详细介绍如何使用构建一个他励直流电机的启动与制动过程仿真模型,并通过仿真分析其动态响应。本文详细介绍了如何使用构建一个。

xiaoheshang_123的博客 227

S速度曲线轨迹规划(普通变频位置闭环控制算法详细介绍+SCL代码)

位置控制用PD控制器,详细内容介绍请查看下面博客文章:PD控制器算法详细解读_RXXW_Dor的博客-优快云博客鉴于积分和微分在工程上的大量应用,这篇博文主要讲解工程上的如何求导f'(x),导数反映的是函数(信号)的变化率,牛顿也是在研究运动的时候提出了微积分的概念,我们知道反映位移变化的快慢程度是速度v(t),反映速度变化快慢程度的物理量是加速度(速度的变化率)。

RXXW_Dor的博客 3890

Java基础加强总结(1)

一、做开发时的两个阶段 编译时阶段:写源代码、用javac编译 运行时阶段:运行程序 二、静态导入 import语句可以导入一个类或者某个包中的所有类 import static语句导入一个类中的某个静态方法或所有静态方法 package day1; import static java.lang.Math.max; public class StaticImport {

zxiaoy的专栏 449

汇川H5U模拟量输出模拟量转换FC: S_RTI

汇川H5U模拟量输入模拟量转换 FC S_ITR_RXXW_Dor的博客-优快云博客接口中的临时变量,如果优化的可以省去一些,感兴趣的可以自行编写修改下,这里不在举例。至此模拟量输入转换FC编写完成。

RXXW_Dor的博客 6680

java的可变参数

在Java5 中提供了变长参数(varargs),也就是在方法定义中可以使用个数不确定的参数。使用...表示可变长参数,例如在具有可变长参数的方法中可以把参数当成数组使用,例如可以循环输出所有的参数值。{{System.out.println("可变参数:" + string);}}{{System.out.println(test + ",新的可变参数:" + string);}}{{System.out.println(test + ",新的可变参数:" + string);

TimeFriends 1641

前端技能树,面试复习第 54 天—— 手写代码:情景题

前端修罗场提供全网最专业的前端优质文章与社区服务,为应届生,初中级前端工程师提供全面、优质的面试服务、技能提升、职场解惑服务!内容包含:前端面试辅导,前端面试题,前端交流,前端答疑,前端基础知识,前端知识体系,技能树搭建,Javascript,CSS,CSS3,HTML,React,Vue,小程序,前端简历,职业交流,远程工作,英文交流,英文提升,外企,互联网,国企,大厂,牛客面试题,掘金面试题,面经,优质前端文章分享...

前端进阶之路 | 中大厂、外企、国企内推 | 面试培训 | 简历修改 986

【ESP32摄像头开发实例】-视频流接入Home Assistant

在这个项目中,我们将使用ESP32-CAM板构建一个IP监控摄像头。ESP32摄像头将托管一个视频流媒体网络服务器,您可以使用网络中的任何设备进行访问。

视觉与物联智能 792

java可变参数

java可变参数 前言:函数是指定义在类中的一段可以独立运行的小程序,如方法,构造器等。 1.java可变参数是指在调用方法时传入不定长度的参数,本质上是基于数组实现的。 //参数为可变参数 public static void element(Integer... args){ } //参数为数组 public static void element(Integer[] args){ } 2.在定义方法时,在最后一个形参上加"…"就表示该形参可以接受多个参数值,多个参数值

zh123456_789的博客 6959

C#图像处理:OpenCVSharp实现简单人脸识别

人脸识别是计算机视觉领域中的一个重要研究方向,它可以通过分析和比对人脸图像,实现识别和验证的功能。希望通过这篇文章的学习,你对OpenCVSharp和人脸识别有了初步的了解,并能够运用这些知识进行自己的项目开发。当我们运行程序时,它会加载人脸识别模型并读取待识别的图像,然后进行人脸检测并在图像上标记出检测到的人脸位置。当然,这只是一个入门级的示例,实际的人脸识别系统还需要更加复杂的算法和大量的训练数据来提高准确性和鲁棒性。最后,我们遍历检测到的人脸,并在原始图像上绘制矩形框,标记出检测到的人脸位置。

WELL_CODER的博客 1129

Java可变参数

什么是可变参数 在 Java 5 中提供了变长参数,允许在调用方法时传入不定长度的参数。变长参数是Java的一个语法糖,本质上还是基于数组的实现 void foo(String... args); void foo(String[] args); //方法签名 ([Ljava/lang/String;)V // public void foo(String[] args) 定义方法在定义方

戎码人生 2万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java中可变参数方法

Java中可变参数方法 J2SE 1.5中提供了Varargs机制,允许直接定义能和多个实参相匹配的形参。从而,可以用一种更简单的方式,来传递个数可变的实参。 Varargs的含义 大体说来,“Varargs”是“variable number of arguments”的意思。有时候也被简单的称为“variable arguments”,不过因为这一种叫法没有说明是什么东西可变,所以意义稍...

Mr.Phoebe的专栏 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

java 可变参数_Java可变参数

Java可变参数(varargs)是在Java 1.5中引入的。Java可变参数也称为java变量参数。java中的可变参数使方法能够接受可变数量的参数。在方法签名中使用三个点(...)也称为省略号,以使其接受变量参数。例如 -public static int sum(int i, int...js ){//do something}关于java中可变参数的要点 -在方法中只能有一个可变参数。只...

weixin_34966346的博客 336

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java——可变参数

Java的可变参数(Varargs)是一种语法特性,允许一个方法接受不定数量的参数。可变参数的使用通过在参数类型后面添加省略号()实现。这使得方法在调用时可以传入不同数量的参数,而不需要为每种情况分别定义方法。可变参数的具体语法: 3、内部具体原理 在方法内部,可变参数实际上被当作一个数组来处理。如果你定义了一个可变参数类型为,在方法内部它将被视为一个数组。因此,你可以使用数组的方式来遍历和操作这些参数。 4、可变参数的规则和注意事项 1)一个方法只能有一个可变参数: 2)可变参数可以与其他

Stewie Lee的博客 3336

Java 可变参数传递

1.JDK 1.5 开始,Java支持传递同类型的可变参数给一个方法。    方法的可变参数的声明如下所示:typeName... parameterName    在方法声明中,在指定参数类型后加一个省略号(...) 。    一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。 2.示例:public void show(int... a) {};   ...

程序员学习圈 7478

java+list可变参数_Java 可变参数

众所周知, Java可以通过... 来给一个方法定义一个可变长度的参数.例如// 返回可变参数的个数public void method(int ... i){System.out.println(i.length);}其中注意点一共有两个只能设定一个可变参数, 并且这个参数必须在最后//Vararg parameter must be the last in the listpublic voi...

weixin_30290131的博客 4026

Java中的可变参数

Java在1.5之后允许方法使用可变参数,可变参数的好处在于:它允许传递0个或者多个参数。比如原来有一段代码如下:   public class Test { public static void main(String[] args) { test(); test(new String[]{"a"}); test(new String...

义臻的博客 1万+

Java中可变参数

最近在读《clean code》,想规范一下自己的编码。有一些概念重新回顾一下,遂在此作为记录。 一、什么是可变参数 可变参数:本质就是动态 创建的数组。 // 可变参数,形参列表可以接受0个值,也可以接受n个值。 修饰符 返回值类型 方法名(数据类型…变量名){ 方法体...

Evan's Blog ٩(๑❛ᴗ❛๑)۶ 2581

Java的可变参数列表

先写例子,再解释: private static void printVariableArgs(Object... args) { System.out.print(&amp;amp;amp;amp;amp;amp;amp;quot;argsLength: &amp;amp;amp;amp;amp;amp;amp;quot; + args.length + &amp;amp;amp;amp;amp;amp;amp;quot;; args: &amp;amp;amp;am

markMe1024的博客 854
上一篇: java中的string
下一篇: loadrunner小知识
iteye_3921
博客等级 码龄8年 0粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值