Java-可变参数
发布者 : noShutdown | 发布时间 : 2019-01-17 20:07:59文章号 : 39 | 阅读量 : 2+1 | AAW值(?) : 30.00 (仅供参考)
为什么使用可变参数
public
void method(){}
public
void method(int a){}
public
void method(int a, String b){}
public
void method(int a, String b, long c){}
我们在编写方法的过程中,可能会遇见一个方法可能有不确定个参数的情况,一般我们会使用方法的重载来解决这个问题,但是如果参数很多写起来就很繁琐,同时每次扩展也很麻烦,所以我们使用数组作为参数
int[] a = {1, 2, 3, 4}; public void method(int[] args){ for(int a:args){ System.out.println(a); } }
但是使用数组作为参数还要在每次使用之前定义一个数组,很麻烦,所以还有另一种方法
使用不定项参数,由于不定项参数可以理解为数组,所以定义了int[] 就不能写int… 这两者是相同的。
public
void method(String...args){ //不能写int... args因为实际上就是int[] args 与上面的方法冲突了
for(String a:args){
System.out.println(a);
}
}
还可以套用数组,产生二维数组,只能是[]在前…在后,由于参数变了所以for each时的变量也需要跟着改变。
public
void method(int[]... args){ //定义二维数组参数
for(int[] a:args){
System.out.println(a);
}
}
注意事项
1) 不定项参数必须放在参数列表的最后一个
2) 不定参数只能有一个(多个,必然有一个不是最后一个)
3) 重载时,运行优先级问题
为什么不定项参数必须放在参数列表最后一个:
public void method(int... args, int i){}
编译错误,因为前面是不定项,系统判断不出i是哪一个,即使不是同一数据类型也不行
安抚
为什么不定项参数只能有一个:
public void method(int... args, int... args2){} //错误 public void method(int i, String... strings){} //正确用法 public void method(int i, int j, int... args){} //正确用法
不定项的参数必须放在最后,因为args不确定个数,所以系统不能判断什么时候是args2的参数
重载时运行优先级:
public void method(String... args){} public void method(String s1){} //确定参数的方法 public void method(String s2, String s3){} //确定参数的方法 public static void main(String[] args){ test.method("看看调用哪个方法"); //调用了method(String s1) test.method("看看调用哪个method", "。。。。"); //调用了method(String s2, String s3) }
在定义了不定项方法和确定参数方法时,系统会优先调用带确定参数的方法