java 可变参数列表_java的可变参数列表

关于java的可变参数列表

1.简介:

java的可变参数列表是的从jdk1.5开始新增的,其英文名词varargs

2.作用

可以传未知个数的参数,无需手动将参数列表装入数组

3.语法

//可变参数列表的varname被编译后其实是一个数组来的

anymethod(typename ... varname){}

4.简单例子

​ 可以传很多个参数,也可以不传参数。某种意义上说还可以减少方法的重载。

public class Test {

public static void varArgs(int ... numbers){

//numbers其实是数组,它有length属性,numbers.length可以获取它的参数个数;可以用下标访问值,比如number[0],当然这是要number.lenth>0时候才可以访问的。

for(int s: numbers){

System.out.print(s+",");

}

System.out.println();

}

public static void main(String arg[]){

varArgs();

varArgs(1,2);

varArgs(1,2,3,4,5,6);

}

}

输出结果是:

1,2,

1,2,3,4,5,6,

​ 这种写法挺酷的。当然用数组也可以实现,不过会多几个步骤,需要方法重载无参数的情况,另外使用的时候也需要创建一个数组,会比可变参数列表的写法多些代码。

代码如下:

public class Test {

public static void varArgs(){

System.out.println();

}

public static void varArgs(int[]numbers){

for(int s: numbers){

System.out.print(s+",");

}

System.out.println();

}

public static void main(String arg[]){

varArgs();

varArgs(new int[]{1,2});

varArgs(new int[]{1,2,3,4,5,6});

}

}

​ 显然,可变参数列表的写法舒服、简洁些,看起来也高级些。

5.注意事项

//1.可变参数列表一定是在最后的

public void test(int ... num,double n)//是错误的

public void test(double n,int ... num)//是正确的

//2.每个方法最多只有一个可变参数列表

6.结合泛化

​ 有时候我们使用泛化还可以让参数变得更加灵活些,让参数类型有更多选择。

比如

public class Test {

public static void varArgs(E ... arg){

for(E s: arg){

System.out.print(s+",");

}

System.out.println();

}

public static void main(String arg[]){

varArgs(11.1,2.3,0.4);

varArgs(1,2,3,4,5,6);

varArgs("hi","hello");

}

}

输出

11.1,2.3,0.4,

1,2,3,4,5,6,

hi,hello,

​ 注意在这里,如果要像之前那样用数组改写会有所不同,在可变参数列表中这里的泛化的每个参数不一定需要统一类型,如下面的

public class Test {

public static void varArgs(E ... arg){

for(E s: arg){

System.out.print(s+",");

}

System.out.println();

}

public static void main(String arg[]){

//下面的调用时是可运行的

varArgs("hi",1,new double[]{});

}

}

​ 其实,上面的泛化相当于参数就是Object类型

public class Test {

public static void varArgs(Object ... arg){

for(Object s: arg){

System.out.print(s+",");

}

System.out.println();

}

public static void main(String arg[]){

//下面的调用时是可运行的

varArgs("hi",1,new double[]{});

}

}

7.典型的应用

比如java的System.out.printf()方法

//前面的第一个参数是格式字符串,后面的参数就是可变参数列表

System.out.printf("%s,%d/%d/%d","cendeal",2019,3,17);

下面是其源码定义

//System是java的类,out是System类的类成员,out是PrintStream对象,printf()是PrintStream的成员方法,所以访问就是System.out.printf()

public class PrintStream extends FilterOutputStream

implements Appendable, Closeable

{

//此处省略该类其他代码

public PrintStream printf(String format, Object ... args) {

return format(format, args);

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值