4.9.1 可变参数的定义与使用
可变参数的简单语法格式为:
其中,argumentList为普通参数,可选项;dataType为数据类型或者类;自动转换成dataType[]类型的数组;…为Java的操作符,表示0到多个,必须是3个点;argumentName为参数名。
注意:一个方法中,只能定义一个可变参数,而且可变参数必须位于最后一项。
【例4-32】 方法中可变参数是基本类型的举例。
程序运行结果:
(注:第一行是空行)
思考与分析:(1)方法test(int...objects)中的参数是可变参数。它的参数个数不确定,但都是int类型。调用方法的实参个数分别是0个、1个和5个。
(2)for(int i:objects)是增强for语句。相当于for(k=0,i=objects[k];k<objects.length;k++,i=objects[k]){}。
模仿例4-32:编程完成具有可变参数的求最大值方法。
【例4-33】 可变参数是引用类型的举例。
程序运行结果:
思考与分析:(1)可变参数列表中同时使用基本类型与包装类。
(2)可变参数==数组参数?在带可变参数的方法体中,读取可变参数列表就是以数组的方式来读取;带可变参数的方法可以传入一个数组参数,但带数组参数的方法却不能传入可变参数。new Integer[]{1,2,3,4,5}是包装类的数组对象,可作实参,但数组变量本质上是数组对象的引用值,若打印的话只能是对象的字符串,不能作实参。
模仿例4-33:编程使用可变参数,打印参加聚会人员的名单。
【例4-34】 可变参数的类型可以是类,但调用方法的实参是可变参数类型的子类。
程序运行结果:
思考与分析:(1)数组对象可作实参,但必须转换成Object类型。数组变量不能传递给可变参数。这样,String[]name=new String[]{″张三″,″李四″,″王五″};listNameInParty(″倪二″,name);语句添加到程序中,会出现编译错误。
(2)由于可变参数是Object类型,所以Object类的子类对象都是合法的实参,这样,基本类型自动装箱(转换成)相应的包装类传给形参。有关自动装箱内容在6.6.3节中讨论。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。