可变个数的方法

可变个数的方法

  • 使用场景
    在调用方法时,可能会出现方法的形参类型是确定的,但参数的个数不确定。这时候需要用到可变个数的方法
  • 声明格式:方法名(参数类型 …参数名)
  • 注意:可变个数形参的方法在调用的时候,实际的实参个数可以是0个、一个乃至多个。

可变个数方法的举例


public class test {
   public static void main(String[] args) {
       test t1 = new test();
       t1.printf();
       t1.printf(1);
       t1.printf(1,2);
       t1.printf(1,2,3);
   }
   public void printf(int ... num){
       System.out.println(111);
   }
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可变个数方法的重载

public class test {
   public static void main(String[] args) {
       test t1 = new test();
       t1.printf();
       t1.printf(1);
       t1.printf(1,2);
       t1.printf(1,2,3);
   }
   public void printf(int ... num){
       System.out.println("0");
   }
   public void printf(int i){
       System.out.println(1);
   }
   public void printf(int i,int j){
       System.out.println(2);
   }
   public void printf(int i,int j ,int k){
       System.out.println(3);
   }
}

当既存在可变个数方法,又存在同名非可变个数方法的时候,编译器会优先调用非可变个数的方法

同时,可变个数方法,又与其他同方法名方法构成了重载方法

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数组类型的冲突


public void f(int ... nums){
       System.out.println(1);
   }
public void f(int []nums){
       System.out.println(2);
   }

特殊地,可变个数方法的形参与其同方法名的数组形参方法,不能构成重载

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以理解为int[ ] 和 int … 为同一类型

public class test {
   public static void main(String[] args) {
       test t1 = new test();
       t1.f(new int[]{1,2,3,4,5});
       t1.f(1,2,3,4,5);
   }
   public void f(int ... nums){
       for (int i = 0; i < nums.length; i++) {
           System.out.print(nums[i]);
       }
       System.out.println();
   }
}

输出为:    
12345
12345

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

多个参数的可变方法

若有多个参数,可变个数的形参,必须声明在形参列表的最后

public class test {
   public void f(int ... nums,int i){

   }
}
//编译报错

此时,有两个参数,一个为可变个数,一个为普通int,但可变个数参数在前

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

public class test {
   public void f(int i,int ... nums){

   }
}
//编译通过

此时,有两个参数,一个为可变个数,一个为普通Int,但可变个数参数再后

可变个数方法只能存在一个可变个数参数

   public void f(int ... num1,int ... num2){

   }
//编译报错

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

原因杂谈

public class test {
   public static void main(String[] args) {
       test t1 = new test();
       t1.f(1,2,3,4,5,6);
   }
   public void f(int ... num1,int ... num2){
   }
}
//假设编译通过

假设编译通过,此时,存在六个形参

但编译器不清楚,1,2,3,4,5,6 中,哪个作为形参传给num1,哪个传给num2

public class test {
   public static void main(String[] args) {
       test t1 = new test();
       t1.f(1,2,3,4,5,6);
   }
   public void f(int  num1,int ... num2){
   }
}
//编译通过
//将1传给num1
//将2,3,4,5,6传给num2

总结

  • 可变个数形参的方法与同一个类中,同名的多个方法可以构成重载
  • 可变个数形参若与同类方法的形参类型相同,则不能构成重载
  • 可变个数的形参必须声明在形参的末尾
  • 可变个数的形参只能在形参列表中出现一次

声明:本文为自主学习笔记,如有错误,允以包涵!

  • 21
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值