文本浏览器

Java-可变参数

发布者 : noShutdown | 发布时间 : 2019-01-17 20:07:59
文章号 : 39 | 阅读量 : 137+1 | AAW值(?) : 0.44 (仅供参考)

为什么使用可变参数

public void method(){}
public void method(int a){}
public void method(int a, String b){}
public void method(int a, String b, long c){}

我们在编写方法的过程中,可能会遇见一个方法可能有不确定个参数的情况,一般我们会使用方法的重载来解决这个问题,但是如果参数很多写起来就很繁琐,同时每次扩展也很麻烦,所以我们使用数组作为参数

int[] a = {1, 2, 3, 4}; public void method(int[] args){     for(int a:args){         System.out.println(a);     }

}

但是使用数组作为参数还要在每次使用之前定义一个数组,很麻烦,所以还有另一种方法

使用不定项参数,由于不定项参数可以理解为数组,所以定义了int[]  就不能写int…  这两者是相同的。

public void method(String...args){   //不能写int... args因为实际上就是int[] args  与上面的方法冲突了
   
for(String a:args){
        System.out.println(a);
    }
}

还可以套用数组,产生二维数组,只能是[]在前…在后,由于参数变了所以for each时的变量也需要跟着改变。

public void method(int[]... args){  //定义二维数组参数
   
for(int[] a:args){
        System.out.println(a);
    }
}

注意事项

1)      不定项参数必须放在参数列表的最后一个

2)      不定参数只能有一个(多个,必然有一个不是最后一个)

3)      重载时,运行优先级问题

为什么不定项参数必须放在参数列表最后一个:

public void method(int... args, int i){}

编译错误,因为前面是不定项,系统判断不出i是哪一个,即使不是同一数据类型也不行

安抚

为什么不定项参数只能有一个:

public void method(int... args, int... args2){}  //错误 public void method(int i, String... strings){}   //正确用法 public void method(int i, int j, int... args){}   //正确用法

不定项的参数必须放在最后,因为args不确定个数,所以系统不能判断什么时候是args2的参数

重载时运行优先级:

public void method(String... args){} public void method(String s1){}   //确定参数的方法 public void method(String s2, String s3){}   //确定参数的方法 public static void main(String[] args){     test.method("看看调用哪个方法");     //调用了method(String s1)     test.method("看看调用哪个method", "。。。。");    //调用了method(String s2, String s3) }

在定义了不定项方法和确定参数方法时,系统会优先调用带确定参数的方法






评论加载中...

+ 参与讨论