Hi!欢迎光临陕西省的权威思科、华为、Oracle、红帽、深信服、微软认证培训中心!
| 029-88235527
您现在所在位置:首页 > 新闻资讯 > 最新资讯 >

Java可变长参数列表详解

发布日期:2019-09-05 17:22:11点击次数:

分享到:
  今天西安鸥鹏培训机构小编为大家介绍“Java可变长参数列表详解”,希望此文能够帮助到大家,下面就随小编一起看看Java可变长参数列表详解的内容吧。
Java可变长参数列表详解

  Java中定义了变长参数,允许在调用方法时传入不定长度的参数。

  Java可变长参数定义及调用

  在定义方法时,在最后一个形参后加上三点…,就表示该形参可以接受多个参数值,多个参数值被当成数组传入。上述定义有几个要点需要注意:

  可变参数只能作为函数的最后一个参数,但其前面可以有也可以没有任何其他参数

  由于可变参数必须是最后一个参数,所以一个函数最多只能有一个可变参数

  Java的可变参数,会被编译器转型为一个数组

  变长参数在编译为字节码后,在方法签名中就是以数组形态出现的。这两个方法的签名是一致的,不能作为方法的重载。如果同时出现,是不能编译通过的。可变参数可以兼容数组,反之则不成立

  publicvoidfoo(String...varargs){}

  foo("arg1","arg2","arg3");

  //上述过程和下面的调用是等价的

  foo(newString[]{"arg1","arg2","arg3"});

  例如,求任意个整数的乘积。

  packageexercise;

  publicclassproduct{

  publicstaticintfunc(int...args){

  intret=1;

  for(inti:args)ret*=i;

  returnret;

  }

  publicstaticvoidmain(String[]args){

  System.out.println(func(1,2,3));

  System.out.println(func(2,2,2,2,2,2));

  System.out.println(func(100,1000));

  }

  }

  由于可变长参数就是被编译器转化为数组实现的,我们完全可以写成以数组做参数的形式:

  packageexercise;

  publicclassproduct{

  publicstaticintfunc(int[]args){

  intret=1;

  for(inti:args)ret*=i;

  returnret;

  }

  publicstaticvoidmain(String[]args){

  System.out.println(func(newint[]{1,2,3}));

  System.out.println(func(newint[]{2,2,2,2,2,2}));

  System.out.println(func(newint[]{100,1000}));

  }

  }

  方法重载

  优先匹配固定参数

  调用一个被重载的方法时,如果此调用既能够和固定参数的重载方法匹配,也能够与可变长参数的重载方法匹配,则选择固定参数的方法:

  publicclassVarargs{

  publicstaticvoidtest(String...args){

  System.out.println("version1");

  }

  publicstaticvoidtest(Stringarg1,Stringarg2){

  System.out.println("version2");

  }

  publicstaticvoidmain(String[]args){

  test("a","b");//version2优先匹配固定参数的重载方法

  test();//version1

  }

  }

  匹配多个可变参数

  调用一个被重载的方法时,如果此调用既能够和两个可变长参数的重载方法匹配,则编译出错:

  publicclassVarargs{

  publicstaticvoidtest(String...args){

  System.out.println("version1");

  }

  publicstaticvoidtest(Stringarg1,String...arg2){

  System.out.println("version2");

  }

  publicstaticvoidmain(String[]args){

  test("a","b");//Compileerror

  }

  }