从JDK1.5之后,Java允许定义形参个数可变的参数,从而允许为方法指定数量不确定的形参。如果在定义方法时,在最后一个形参的类型后增加三点(...),则表明该形参可以接受多个参数值,多个参数值被当成数组传入。下面程序定义了一个形参个数可变的方法。
package cn.gome.c_object;
public class VarargsTest {
//======================1.定义形参个数可变的方法======================
public static void testVarargs(int a, String... books) {
// book当成数组处理
for (String book : books) {
System.out.println(book);
}
// 输出整数变量a的值
System.out.println(a);
}
// ======================2.采用数组形参来定义方法======================
public static void testArray(int a, String[] books) {
// book当成数组处理
for (String book : books) {
System.out.println(book);
}
// 输出整数变量a的值
System.out.println(a);
}
public static void main(String[] args) {
// 采用可变个数形参的方法调用
testVarargs(5, "周周", "江江", "霄霄");
// 采用数组形参的方法调用
testArray(2, new String[]{"周周","江江","霄霄"});
}
}
运行结果如下:
从上面的运行结果可以看出,当调用test()方法时,books参数可以传入多个字符串作为参数值,从test()的方法体代码来看,形参个数可变的参数本质就是一个数组参数,也就是说,下面两个方法签名的效果完全一样:
一、方法定义上
1.采用可变个数形参来定义方法
// 定义形参个数可变的方法
public static void testVarargs(int a, String... books)
// 采用数组形参来定义方法
public static void testArray(int a, String[] books)
二、方法调用上
这两种形式都包含了一个名为books的形参,两个方法的方法体内都可以把books当成数组处理,但区别是调用两个方法时存在差差别:
1.采用可变个数形参的方法调用
// 采用可变个数形参的方法调用
testVarargs(5, "周周", "江江", "霄霄");
2.采用数组形参的方法调用
// 采用数组形参的方法调用
testArray(2, new String[]{"周周","江江","霄霄"});
最后,需要注意的地方:
数组形式的参数可以处于形参列表的任意位置,但是个数可变的形参处于形参列表的最后,也就是说,一个方法中最多只能有一个个数可变的形参。