java可变长参数
可变长度参数:
适用于参数个数不确定,类型确定的情况。
1、可变长度参数语法: 类型… 变量名
(注意:一定是3个点。"…"在变量类型和变量名之间,前后有没有空格都可以 。)
例如:
- int… args
- String… args
(这些就是可变长度参数)
2、相关知识:
2.1、可变长度参数,能够传入的参数个数是:0~N个。
2.2、可变长度参数,只能放在参数列表的最后一个位置上,而且可变长度参数只能有1个。
2.3、可变长度参数,可以当做一个数组来看待。
例子1:
public class Test {
public static void main(String[] args) {
m();
m(1,2);
m(1,2,3,4,4);//可以输入0~N个
//编译报错:定义的是int类型的参数
//m("123")
}
public static void m(int... args){//可变长度参数
//遍历
for (int i = 0; i < args.length; i++) {
System.out.println(args[i]);
}
System.out.println("=======");
}
}
运行结果:
=======
1
2
=======
1
2
3
4
4
=======
例子2:
可变长度参数只能在参数列表的最后,且只能有一个
原因:
当可变参数个数多于一个时,必将有一个不是最后一项,所以只支持有一个可变参数。因为参数个数不定,所以当其后边还有相同类型参数时,Java 无法区分传入的参数属于前一个可变参数还是后边的参数,所以只能让可变参数位于最后一项
public class Test1 {
public static void main(String[] args) {
m(1,"");
m(1,"我","是","人");
m2(2,"我","的","天");
}
//错误:参数列表:必须在最后,只能有1个
//public static void mc1(String... args1,int args2){}
//public static void mc2(String... args1,int... args2){ }
public static void m(int a,String... args1){
System.out.println(a);
for (int i = 0; i < args1.length ; i++) {
System.out.println(args1[i]);
}
System.out.println("======");
}
public static void m2(int a,String b,String... args1){
System.out.println(a);
System.out.println(b);
for (int i = 0; i < args1.length ; i++) {
System.out.println(args1[i]);
}
System.out.println("======");
}
}
运行结果:
1
======
1
我
是
人
======
2
我
的
天
======
例子3:
实际上:调用可变参数的方法时,编译器为该可变参数隐式地创建一个数组,在方法体中以数组的形式访问可变参数。
public class Test2 {
public static void main(String[] args) {
m();
m("你","看","我","像","数","组","吗");
//也可以传一个数组
String[] strings = {"你","过","来","呀"};
m(strings);
//也可以这样放一个数组
m(new String[]{"你","好"});
m("我","好");
}
public static void m(String... args) {
//遍历
//args有length属性,说明args是一个数组。(所以可以将可变长度参数当做一个数组来看)
for (int i = 0; i < args.length; i++) {
System.out.println(args[i]);
}
System.out.println("======");
/* //foreach遍历
for (String arg : args){
System.out.println(arg);
}*/
}
}
运行结果:
======
你
看
我
像
数
组
吗
======
你
过
来
呀
======
你
好
======
我
好
======
文章难免有错误与欠妥之处,恳请各位批评指正。
(不足者补充之,冗芜者删削之,错误者改正之)