快速业务通道

如何应用Java的可变参数 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19

如何应用Java的可变参数

时间:2011-02-12

Java语言在JDK1.5中首次推出可变参数,variable arguments,或简称varargs。这一新语言特征给软件开发人员在编写方法重载时提供了方便和灵活性。但可变参数的应用并不像想象的那么简单,使用时有其特殊要求和局限性。

重载的最好例子

读者朋友可能有这样的编程经历:在编写一个方法时,其参数随着程序运行的条件而变化,在编译期间无法确定。具体地讲,例如编写一个打印参加聚会party的程序,其中方法printInvitation()将根据作为参数的参加人姓名,打印邀请卡。但这个参数的数量事先并不确定。当然可以编写许多重载的方法来解决这个问题,如:

void printInvitation(String name); void printInvitation(String name1, String name2); void printInvitation(String name1, String name2, String name3); ...

问题是编写多少个重载的方法才可以解决给所有参加者打印邀请卡?也许需要改变您的程序设计,而使用数组或者链接表了。

应用可变参数可以方便、灵活地解决这类问题。例如:

//完整程序存在本书配套资源目录Ch12名为VarargsTest.java void printInvitation(String...names) {     for (String name : names) {         makeCard(name); //调用方法按照姓名打印邀请卡         System.out.println("Recording info: invitation card has been printed for " + name);     } }

这里,(String...names)便是可变参数。它包括从0到任意个相同类型的参数。在编译期间,这个可变参数将被转换为字符串数组形式,即:

void printInvitation(String[] names)

如下是调用这个方法的例子:

printInvitation("李刚", "David Smith"); printInvitation("Greg Wu", "Paul Nguyen", "Liu Wei", "张新"); printInvitation(); //无参数

当在无参数情况下调用这个方法时,将不执行任何这个方法中的代码。

如下是运行结果:

Recording info: invitation card has been printed for 李刚

Recording info: invitation card has been printed for David Smith

Recording info: invitation card has been printed for Greg Wu

Recording info: invitation card has been printed for Paul Nguyen

Recording info: invitation card has been printed for Liu Wei

Recording info: invitation card has been printed for 张新

如何应用Java的可变参数(2)

时间:2011-02-12

12.7.2  怎样工作

可变参数也不神秘。实际上,JVM将根据程序中调用这个方法时提供的参数数量,来装载和运行它。

可变参数的简单语法格式为:

methodName([argumentList], dataType...argumentName);

其中:

argumentList——普通参数,可选项。

dataType——数据类型或者类。自动转换成dataType代表的数组。

...——Java的操作符。表示0到多个。必须是3个点。

argumentName——参数名。

注意,可变参数必须在最后。

下面是应用可变参数的更多例子:

// 完整程序存在本书配套资源目录Ch12名为VarargsTest.java public static int sumInts(int...numbers) { //可变整数数组类型参数     int sum = 0;     for (int num : numbers)         sum +=num;     return sum; }

再如:

public void totalTax(String name, double rate, double...amount) {                                             //普通参数在前、可变参数在后     double total = 0.0,            tax = 0.0;   

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号