java中可变参数方法

java提供了可变参数的方法,即方法的参数个数可以不确定,用"..."定义。

[java]  view plain  copy
  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3.   
  4.   
  5. public class VariableParameter {  
  6.   
  7.     //求若干个整型数中的最大值  
  8.     public int getMax(int... items){       //定义可变参数items  
  9.       
  10.         int max = Integer.MIN_VALUE;       //次数为int能表示的最小值,值为-2147483648  
  11.         for(int item : items){  
  12.             max = item > max? item : max;    //取大值  
  13.         }  
  14.         return max;  
  15.     }  
  16.     //返回比number大的数的个数  
  17.     public int getLagerNum(int number,int... items){  //若除了可变长参数还有其它参数,可变长参数一定要放在最后  
  18.         int sum = 0;  
  19.         for(int item : items){  
  20.             if(item > number){  
  21.                 sum++;  
  22.             }  
  23.         }  
  24.         return sum;  
  25.     }  
  26.       
  27.     public static void main(String[] args) {  
  28.         VariableParameter vp = new VariableParameter();  
  29.         System.out.println("最大值:"+vp.getMax());  //可以不写参数  
  30.         System.out.println("最大值:"+vp.getMax(2,1,4,7,2,-1,3,3));  //可以在参数中直接写入若干个参数  
  31.         System.out.println("最大值:"+vp.getMax(-1,4,5,0,1));        //可以在参数中直接写入若干个参数  
  32.           
  33.         System.out.println("比number大的数的个数:"+vp.getLagerNum(91,11,5,14,-1,9,21));  //9为number,后边的是items  
  34.         int a[] = new int[] {1,11,5,14,-1,9,21};  
  35.         System.out.println("比number大的数的个数:"+vp.getLagerNum(9,a));     //items也可以用数组替代  
  36.           
  37.     }  
  38.   
  39. }  
运行结果如下:

[plain]  view plain  copy
  1. 最大值:-2147483648  
  2. 最大值:7  
  3. 最大值:5  
  4. 比number大的数的个数:3  
  5. 比number大的数的个数:3  

从上面代码可以看出:

     1.在方法中定义可变参数后,我们可以像操作数组一样操作该参数;

     2.如果该方法除了可变参数还有其它的参数,可变参数必须放到最后;

     3.调用使用了可变参数的方法时:

              a.可以不写参数,即传入空参;

              b.可以直接在里边写入参数,参数间用逗号隔开;

              c.可以传入一个数组;


继续往下看:

[java]  view plain  copy
  1. public class VariableParameter {  
  2.   
  3.     public void comp(int... items){  
  4.         System.out.println("1");  
  5.     }  
  6.       
  7.     public void comp(int item1,int item2){  
  8.         System.out.println("2");  
  9.     }  
  10.       
  11.     public static void main(String[] args) {  
  12.         VariableParameter vp = new VariableParameter();  
  13.         vp.comp(12);  
  14.   
  15.     }  
  16.   
  17. }  
运行结果:

[plain]  view plain  copy
  1. 2  

由此可以看出:

         4.拥有可变参数的方法可以被重载,在被调用时,如果能匹配到参数定长的方法则优先调用参数定长的方法。


继续:

[java]  view plain  copy
  1. public class VariableParameter {  
  2.   
  3.     public void comp(int... items){  
  4.         System.out.println("1");  
  5.     }  
  6.       
  7.     public void comp(int[] items){      //会报错:Duplicate method comp(int[]) in type VariableParameter  
  8.         System.out.println("2");  
  9.     }  
  10.       
  11.     public static void main(String[] args) {  
  12.   
  13.     }  
  14.   
  15. }  

当试图使用数组作为参数去实现重载时,会报错,说明可变参数与数组冲突,但是:

[java]  view plain  copy
  1. public class VariableParameter {  
  2.   
  3.     public void comp(int[] items){      //会报错:Duplicate method comp(int[]) in type VariableParameter  
  4.         System.out.println("2");  
  5.     }  
  6.       
  7.     public static void main(String[] args) {  
  8.         VariableParameter vp = new VariableParameter();  
  9.         vp.comp(1,2,3,4);    //The method comp(int[]) in the type VariableParameter is not applicable for the arguments (int, int, int, int)  
  10.     }  
  11.   
  12. }  
如果定义一个参数为数组的方法,像调用可变参数的方法一样调用它是会报错,说明可变参数并不是一个数组,由此我们可以总结出:

 5:可变参数可以兼容数组参数,但数组参数无法兼容可变参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值