java 5 新特性——可变参数方法

从零搭建高通8255车载开发环境:QNX SDP、SDK配置与镜像编译全流程 本文详细介绍了如何从零搭建高通SA8255P车载开发环境,涵盖QNX SDP部署、SDK工具链配置到多系统镜像编译的全流程。特别针对SAIL安全岛镜像构建、QNX系统优化及Android系统资源分配等关键技术点提供实战指导,帮助开发团队高效完成车载系统开发与调试。 阅读详情

 JDK1.5引进了方法的可变参数,受到许多开发人员的青睐。有了这种机制,我们可以写出类似于JavaScript的arguments那样的带任意多个参数的方法。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值。

 

使用可变参数重载时,要注意几个问题:

 

1) 可变参数方法与数组参数方法重载时

 

Java代码 复制代码
  1. public class MethodParams{   
  2.     //带可变参数的方法   
  3.     public void hello(String ...params) {   
  4.         System.out.println("执行带可变参数的方法,参数个数为:" + params.length);   
  5.     }   
  6.     //带数组参数的方法   
  7.     public void hello(String[] params) {   
  8.         System.out.println("执行带数组参数的方法,数组长度为:" + params.length);   
  9.     }   
  10. }  
public class MethodParams{
	//带可变参数的方法
	public void hello(String ...params) {
		System.out.println("执行带可变参数的方法,参数个数为:" + params.length);
	}
	//带数组参数的方法
	public void hello(String[] params) {
		System.out.println("执行带数组参数的方法,数组长度为:" + params.length);
	}
}

我们写个测试代码运行一下看看结果如何:

Java代码 复制代码
  1. MethodParams mp = new MethodParams();   
  2. mp.hello("AAA","BBB","CCC");  
	MethodParams mp = new MethodParams();
	mp.hello("AAA","BBB","CCC");

  编译时报错:

Java代码 复制代码
  1. MethodParams.java:7: 无法在 MethodParams 中同时声明 hello(java.lang.String[]) 和   
  2.  hello(java.lang.String...)   
  3.         public void hello(String[] params) {   
  4.                     ^   
  5. 1 错误  
MethodParams.java:7: 无法在 MethodParams 中同时声明 hello(java.lang.String[]) 和
 hello(java.lang.String...)
        public void hello(String[] params) {
                    ^
1 错误

结论: JDK不允许存在, 带可变参数的方法和带数组参数的方法在同一类中重载。

可变参数==数组参数? 在带可变参数的方法体时,读取可变参数列表时,就是以数组的方式来读取;

带可变参数的方法可以传入一个数组参数,但带数组参数的方法却不能传入可变参数。

 

 

2) 可变参数方法与可变参数方法重载时

Java代码 复制代码
  1. //带可变参数的方法   
  2. public void hello(String ...params) {   
  3.     System.out.println("执行带可变参数的方法,参数个数为:" + params.length);   
  4. }   
  5. //带固定参数和可变参数   
  6. public void hello(String param1, String ...params) {   
  7.     System.out.println("执行带固定参数和可变参数的方法,参数个数为:" + params.length);   
  8. }  
	//带可变参数的方法
	public void hello(String ...params) {
		System.out.println("执行带可变参数的方法,参数个数为:" + params.length);
	}
	//带固定参数和可变参数
	public void hello(String param1, String ...params) {
		System.out.println("执行带固定参数和可变参数的方法,参数个数为:" + params.length);
	}

  测试代码跟上例中一样,编译时报错:

Java代码 复制代码
  1. MethodParams.java:18: 对 hello 的引用不明确,MethodParams 中的 方法 hello(java.l   
  2. ang.String...) 和 MethodParams 中的 方法 hello(java.lang.String,java.lang.String   
  3. ...) 都匹配   
  4.                 mp.hello("AAA","BBB","CCC");   
  5.                   ^   
  6. 1 错误  
MethodParams.java:18: 对 hello 的引用不明确,MethodParams 中的 方法 hello(java.l
ang.String...) 和 MethodParams 中的 方法 hello(java.lang.String,java.lang.String
...) 都匹配
                mp.hello("AAA","BBB","CCC");
                  ^
1 错误

 结论:JDK不允许存在,带相同参数类型列表(Type List)的参数列表的方法在同一类中重载。

 

 

3)可变参数方法与无参数方法重载时

Java代码 复制代码
  1. //带可变参数的方法   
  2. public void hello(String ...params) {   
  3.     System.out.println("执行带可变参数的方法,参数个数为:" + params.length);   
  4. }   
  5. //不带参数的方法   
  6. public void hello() {   
  7.     System.out.println("执行不带参数的方法");   
  8. }  
	//带可变参数的方法
	public void hello(String ...params) {
		System.out.println("执行带可变参数的方法,参数个数为:" + params.length);
	}
	//不带参数的方法
	public void hello() {
		System.out.println("执行不带参数的方法");
	}

我们都知道,可变参数即可带0个或者多个参数,如果带0个参数即不带参数时,JDK会怎么处理呢?

那我们就以执行"mp.hello()"来测试一下。编译通过,运行正常,调用的还带参数的hello()方法。

结论:当可变参数方法与不带参数的方法重载时,JDK默认调用的是无参数的方法。若类中没有定义无参数的方法,则会调用可变参数的方法。

ubuntu20.04屏幕亮度无法调节(亮度条调节无效)的简单靠谱解决方案及踩坑历程 0 前言   网上关于ubuntu系统亮度无法调节的问题的解决方法有很多,但是绝大部分并没有什么用(这也是我自己的亲身体会),或者并不靠谱。在遍尝各路方法过后,我终于解决了这一棘手的问题(毕竟最大亮度真的非常刺眼,无法长时间直视),在此记录一下踩坑历程以及最后的解决方案。 1 Naive方法   由于使用需要,最近在电脑原有的win10基础上安装了ubuntu双系统。我安装的是当前新版的ubuntu20.04.2.0,靠谱的安装教程可以参考这里。   之前师兄说双ssd安装双系统会有系统启动引导的问题出现, 阅读详情

相关推荐

ZynqMP双核通信避坑指南:Linux驱动+裸机固件协同开发实录

本文详细解析了Xilinx ZynqMP芯片中APU与RPU双核通信的技术实现,重点介绍了通过IPI中断实现Linux驱动与裸机固件协同开发的实战经验。内容涵盖硬件寄存器配置、Linux驱动开发、RPU裸机程序编写以及双核调试技巧,为开发者提供了一套完整的工程化解决方案,帮助规避常见开发陷阱。

weixin_29168153的博客 126

String...的用法

一、前言 在项目中,在检查参数是否为空的工具类中,出现了一个函数的参数列表是这种写法,于是学习了一下这种用法的使用。个人觉得这种处理还是很不错的,使得代码更加简洁。 二、用法 String…是java5新加入的功能,表示的是一个可变长度的参数列表。 其语法就是类型后跟…,表示此处接受的参数为0到多个Object类型的对象,或者是一个Object[]。 例如我们有一个方法叫做test(String…...

Keep on moving! 8万+

一文学会Cadence Sigrity PDN仿真——硬件新手小白都能看懂的保姆级教程

电源完整性的仿真,实际上是在仿真以及优化系统中的等效串联电阻。知道了仿真以及优化的目标之后,接下来就是要弄明白这个串联电阻从哪儿来以及怎么优化。整个系统中的串联电阻实际上由三部分组成:没有相位的阻抗,有相位的容抗和感抗,得益于相位,在某个特定的频点,容抗和感抗会大小相等,相位相反而相互抵消,这时候整个系统中就剩下了阻抗,所以整个系统的串联电阻达到了一个最低值,这种现象就是----谐振。当系统处于谐振点时候,整个系统会有一个最小的串联电阻,所以第一个优化电阻的手段就是让谐振来的更频繁一点。

学习帮的博客 2万+

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

UE4-(IK)实现人物脚贴合地面解决斜坡上脚无旋转无法贴合地面问题

在斜面上脚陷入模型中,需要设置旋转值对脚的骨骼进行一个旋转。 解决思路:在射线检测中可以获取到检测点的法线方向,根据法线方向来计算出脚应该向哪个方向进行适当的旋转,在斜坡上,人物脚需要旋转的轴为x轴和y轴以便来贴合地面,z轴方向的旋转是不需要进行修改的。 如图所示,我们需要求得水平面与斜坡的夹角用来得出人物在x轴上的脚旋转量,在蓝图中提供反正切函数,反正切 = 锐角的邻边/对边 所以 反正切值(脚x轴值(roll)) = 法线Y轴值/法线Z轴 值。 现在将上图的人物想象成面向屏幕,脚需...

Stone的博客 3317

STM32超声波避障小车硬件设计与实时测距实现

超声波测距是嵌入式系统中经典的环境感知技术,其原理基于声波在空气中的传播时间与距离的线性关系,通过精确计时实现非接触式距离测量。该技术具备成本低、抗光干扰强、算法简洁等优势,广泛应用于智能小车、机器人避障、液位监测等场景。工程落地的关键在于硬件信号完整性(如5V/3.3V电平匹配)、微秒级定时精度(依赖高稳定外部晶振与输入捕获模式)以及强干扰环境下的数据鲁棒性(需软硬协同滤波)。本文以STM32F103C8T6为平台,深入解析HC-SR04模块的时序闭环控制、TIM3输入捕获双沿测量、L298N电机状态机驱

weixin_42578963的博客 295

Java方法中的一种参数:可变长度参数列表(String...)

Java对方法参数支持一种写法,叫可变长度参数列表(String...)。

weixin_45241364的博客 1545

华为OD机试真题 新系统 2026-04-22 C++ 实现【小学生班长选举增强版】

9 月份开学第一天,小学某班级进行班长选举活动,班级共有 N 个学生,每个学生最多可投 3 票(对同一个人只能投一票),也可以弃权不投票,大家投票时写上对应学生的名字。 假设学生不存在重名。考虑到部分少数民族名字带分隔,且整体较长,同学在投票时为了方便,允许同学写全称,也可以只写其中的部分连续段。 例如班级里只有 2 个少数民族名称带点的同学:

MISAYAONE的博客 168

java 可变参数,集合与数组的互转,静态导入

可变参数 可变参数是如果类型确定,参数个数不确定,需要用可变参数来定义,参数的具体个数在方法调用时才能确定java把可变参数当做数组处理 可变参数的定义是jdk1.5加入的,比如main方法 public static void main(String [] args) 特点: 如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个。 ...(三个点)位于变量类型和变量名之...

sinat_41132860的博客 1万+

将 SAP BTP ABAP environment 与 SAP S/4HANA Cloud 公有云版集成:从架构理念到落地实战

本文探讨了在SAP云环境中实现ABAP扩展应用与S/4HANA Cloud系统集成的技术方案。通过建立标准化的远程通信通道,开发者可在SAP BTP ABAP环境中开发扩展应用,同时安全访问S/4HANA Cloud的核心业务数据和服务。文章详细介绍了整体架构设计、开发实现步骤(包括定义通信场景、生成服务消费模型和编写调用代码)以及管理员在S/4HANA侧的配置工作(创建通信安排和技术用户)。通过一个业务伙伴自助注册平台的案例,展示了如何在不修改标准系统的情况下实现云扩展,体现了SAP"干净核心&

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 239

智能车图像处理21-进阶篇13--正入十字补线2

这篇文章主要的正入十字补线与1基本相同,主要防止图像中双十字的问题。

taiyuezyh的博客 2033

编写Java程序,通过给定可变参数方法,计算任意给定的多个int类型数据之和

需求说明: 通过给定可变参数方法,计算任意给定的多个int类型数据之和。 实现思路: 定义可变形参方法,参数类型是int类型。 定义变量 sum 接受最终的和。 通过 for 循环计算最终的和值。 在主方法中调用可变参数方法,输出最终和值。 实现代码: public class TestCal { //定义求和方法 public int sum(int...nums) { ...

杨明金的博客 6714

Loki 分布式日志中心服务

分布式日志中心 Loki + Promtail + Grafana

原名又逢乱世。不要放下学习的脚步,毕竟比天天打牌、钓鱼、打游戏更能从内在充实自己。 2354

java5新特性之方法的可变参数

java5的新特性之方法的可变参数,说的是参数的个数可变 示例代码如下 public class VarArgsDemo {public static void main(String[] args) {double sum = getSum(10.0, 34, 13, 54.0);System.out.println(sum);} static double getSu

孤獨的鬥士的博客 276

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Java - 可变参数

* 可变参数:JDK1.5之后出现的新特性 * 使用前提: * 当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数 * 使用格式:定义方法时使用 * 修饰符 返回值类型 方法名(数据类型...变量名){} * 可变参数的原理: * 可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组,来存储这些参数 * 传递...

辞树 175

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java5、java6、java7、java8的新特性

Java5: 1、泛型 Generics:         引用泛型之后,允许指定集合里元素的类型,免去了强制类型转换,并且能在编译时刻进行类型检查的好处。         Parameterized Type作为参数和返回值,Generic是vararg、annotation、enumeration、collection的基石。         A、类型安全    

samjustin的博客 2万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

java可变参数

可变参数是JDK1.5之后出现的新特性。 前提: 当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数。 使用格式: 定义方法时使用 修饰符 返回值类型 方法名 (数据类型…变量名){} 原理: 可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组来存储这些参数。 传递参数的个数不限,可以是0个。 注意事项: 1.一个方法的参数列表,只能有一个可变参数。...

沉静如海的博客。 134

jdk 1.5新特性——可变参数、Foreach

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ---------------------- 17,可变参数、增强for(Foreach语句) 17.1可以参数 jdk1.5新特性可变参数,实际就是接收数组中的元素,在内部完成了对元素进行数组的封装,简化了书写。 可变参数的格式: 权限修饰符 返回值类型 函数名(

loneswordman的专栏 1076

第四章:Java新特性对数组的支持

Java新特性对数组的支持 一. Java新特性——可变参数 在调用一个方法时,必须根据方法的的定义传递指定的参数。但是在JDK1.5(JAVA SE5.0)之后就产生了新的感念——可变参数,即方法中可以接收的参数不再是固定的,而是随着需要传递的,可变参数的定义格式如下: 【可变参数的定义格式】返回值类型 方法的名称(类型…参数名称)向方法中传递可变参数之后,其中的参数是以数组的形式保留下来

程序猿凹凸 650

可变参数

可变参数 可变参数:在JDK1.5之后出现的新特性 使用前提: ​ 当方法的参数列表数据类型已经确定,但是参数的个数不确定就可以使用可变参数 使用格式:定义方法时使用 ​ 修饰符 返回值 方法名(数据类型…变量名){} 可变参数的原理: ​ 可变参数的底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组,来存储这些参数传递的参数个数,可以是0个(不传递),1,2,……多个 可变参数的...

lsc0211的博客 99

【JAVA】27、Java新特性——可变参数

本篇介绍Java新特性——可变参数

思跡的博客 450

java学习笔记(八)

本节课主要讲解java新特性对数组的支持 在JDK1.5之后,java为了方便开发,引入了大量的新特性,这次主要先介绍:可变参数、foreach输出、 1:可变参数 之前曾经说过,一个方法调用的时候规定了5个参数,就必须传递5个,但在JDK1.5之后,为了让方法更具灵活性,

keep calm and carry on 726

Java面向对象——JDK 1.5新特性

面向对象 为什么会出现新特性呢? 新的技术的出现就是为了解决老的问题,Java语言随着自身的不断发展,对那些不利于提高开发率的技术进行了改进。 静态导入 静态导入可以导入静态方法,这样就不必写类名而可以直接省略类名调用静态方法了。 语法:import static 包名.类名.静态方法; 也可以直接导入某个

新长城 1093

java5的新特性fore和可变参数

更新java5新特性:: Java1.5增加了新特性: 可变参数: 适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。 注意:可变参数必须位于最后一项。当可变参数个数多余一个时, 必将有一个不是最后一项,所以只支持有一个可变参数。 因为参数个数不定,所以当其后边还有相同类型参数时, java无法区分传入的参数属于前一个可变参数还是后边的参数, 所以只能让可变参数

Coder_Hello_World的博客 652

Java 方法重载(overload)、方法重写(override)和可变参数列表

生活就是一系列的一系列的机会成本。 方法重载和方法重写是Java相关工作面试时经常问到的一个问题,我第一次问题也回答了这个问题。可变参数列表是JDK 1.5的新特性。一、方法重写(override)方法重写是出先在类的继承中的。 比如父类:Animal.javapublic class Animal{ public void sleep(){ System.out.prin

大写的人博客 2096

可变参数列表-Java SE5新特性

1.可变参数列表的简单实现 当调用方法时,方法的参数个数或类型未知时,称其为可变参数列表。在以前的Java代码中,可以使用Object数组来实现这样的功能。因为,所有的类都是直接或间接继承于Object类。 VarArgs.java package sample; class A1{} public class VarArgs { static void print...

_简单_ 230
上一篇: Java 5 新特性——增强for循环
下一篇: Java 5 新特性——泛型
okjohn
博客等级 码龄23年 6粉丝 34原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值