- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[转] java使用省略的号代替多参数
J2SE 1.5提供了“Varargs”机制。借助这一机制,可以定义能和多个实参相匹配的形参。
从而,可以用一种更简单的方式,来传递个数可变的实参。本文介绍这一机制的使用方
法,以及这一机制与数组、泛型、重载之间的相互作用时的若干问题。
到J2SE 1.4为止,一直无法在Java程序里定义实参个数可变的方法—— 因为Java要求实参
(Arguments )和形参 (Parameters )的数量和类型都必须逐一匹配,而形参的数目是在定义
方法时就已经固定下来了。尽管可以通过重载机制,为同一个方法提供带有不同数量的形参的
版本,但是这仍然不能达到让实参数量任意变化的目的。
然而,有些方法的语义要求它们必须能接受个数可变的实参——例如著名的main方法,就需
要能接受所有的命令行参数为实参,而命令行参数的数目,事先根本无法确定下来。
对于这个问题,传统上一般是采用“利用一个数组来包裹要传递的实参”的做法来应付。
1. 用数组包裹实参
“用数组包裹实参”的做法可以分成三步:首先,为这个方法定义一个数组型的参数;然后在调
用时,生成一个包含了所有要传递的实参的数组;最后,把这个数组作为一个实参传递过去。
这种做法可以有效的达到“让方法可以接受个数可变的参数”的目的,只是调用时的形式不够简
单。
J2SE 1.5中提供了Varargs机制,允许直接定义能和多个实参相匹配的形参。从而,可以用一
种更简单的方式,来传递个数可变的实参。
Varargs 的含义
大体说来,“Varargs”是“variable number of arguments”的意思。有时候也被简单的称
为“variable arguments”,不过因为这一种叫法没有说明是什么东西可变,所以意义稍微有
点模糊。
2. 定义实参个数可变的方法
只要在一个形参的“类型”与“参数名”之间加上三个连续的“.” (即“...”,英文里的句中省略号),
就可以让它和不确定个实参相匹配。而一个带有这样的形参的方法,就是一个实参个数可变的
方法。
清单1:一个实参个数可变的方法
private static int sumUp(int... values) {
}
注意,只有最后一个形参才能被定义成“能和不确定个实参相匹配”的。因此,一个方法里只能
有一个这样的形参。另外,如果这个方法还有其它的形参,要把它们放到前面的位置上。
编译器会在背地里把这最后一个形参转化为一个数组形参,并在编译出的class文件里作上一
个记号,表明这是个实参个数可变的方法。
清单2:实参个数可变的方法的秘密形态
private static int sumUp(int[] values) {
}
由于存在着这样的转化,所以不能再为这个类定义一个和转化后的方法签名一致的方法。
清单3:会导致编译错误的组合
private static int sumUp(int... values) {
}
private static int sumUp(int[] values) {
}
空白的存亡问题
根据J2SE 1.5的语法,在“...”前面的空白字符是可有可无的。这样就有在“...”前面添加空白
字符 (形如“Object ... args” )和在“...”前面不加空白字符 (形如“Object... args” )的两种写
法。因为目前和J2SE 1.5相配合的Java Code Conventions还没有正式发布,所以无法知
道究竟哪一种写法比较正统。不过,考虑到数组参数也有“Object [] args”和“Object[]
args”两种书写方式,而正统的写法是不在“[]”前添加空白字符,似乎采取不加空白
的“Object... args”的写法在整体上更协调一些。
3. 调用实参个数可变的方法
只要把要传递的实参逐一写到相应的位置上,就可以调用一个实参个数可变的方法。不需要其
它的步骤。
清单4:可以传递若干个实参
sumUp(1, 3, 5, 7);
在背地里,编译器会把这种调用过程转化为用“数组包裹实参”的形式:
清单5:偷偷出现的数组创建
sumUp(new int[]{1, 2, 3, 4});
另外,这里说的“不确定个”也包括零个,所以这样的调用也是合乎情理的:
清单6:也可以传递零个实参
sumUp();
这种调用方法被编译器秘密转化之后的效果,则等同于这样:
清单7:零实参对应空数组
sumUp(new int[]{});
注意这时传递过去的
您可能关注的文档
- Unit 6 Company Pr的esentation(新).ppt
- unit 12(称谓口译)的.ppt
- Unit 7 Certificat的ion.ppt
- Unit One的.ppt
- Unit5 Nelson Mand的ela reading课件.ppt
- Unit 3 Travel j的ournal.ppt
- Unit One The Prac的tice of Law.ppt
- UseTerms_Retail_W的indows_8.1_N_update_(to_Windows_8_preinstalled_on_your_computer).pdf
- UseTerms_Retail_W的indows_8.1_China_update_Chinese(Simplified).pdf
- US Patent Law 6的.ppt
- 高三生物一轮复习课件第8课时 酶和ATP.pptx
- 高三生物一轮复习课件 细胞中的元素和化合物,细胞中的无机物.pptx
- 2025年中考物理复习答题技巧与模板构建专题04热学必考的三个重点实验(解析版).docx
- 高三生物一轮复习课件:细胞核的结构和功能.pptx
- 高三生物一轮复习课件:光合作用的影响因素及其应用课件.pptx
- 高三生物一轮复习课件:细胞膜与细胞核.pptx
- 高三生物一轮复习课件蛋白质与核酸.pptx
- 高三一轮复习生物:细胞呼吸的原理和应用课件(1).pptx
- 高三生物一轮复习课件第8讲+酶和ATP.pptx
- 2.2基因在染色体上课件高一下学期生物人教版(2019)必修2 (2).pptx
最近下载
- 综合管廊机电施工方案(总包安装分).docx
- 精品解析:重庆市开州区2023-2024学年七年级下学期期末质量监测历史试题(原卷版).docx VIP
- 实验6二阶电路响应的仿真.pdf VIP
- 青岛版八年级数学下册知识点归纳总结.pdf VIP
- 老码头拆除方案.doc VIP
- 一阶rc电路的暂态响应实验报告.doc VIP
- 2025广东广州市教育系统招聘公办中小学体育教练员18人笔试模拟试题及答案解析.docx VIP
- 2023-2024学年安徽省合肥市高新区八年级(下)期末物理试卷+答案解析.pdf VIP
- 跨学科融合:博物馆地理研学课程设计方案.docx VIP
- 财务比率公式汇总.doc VIP
文档评论(0)