java方法的可变参数用法

来源:互联网 发布:淘宝上的知名甜品店 编辑:程序博客网 时间:2024/05/23 20:21

java方法的可变参数用法:
在JavaSE5中加入了可变参数功能,用法示例为:
public void printArray(Object … args){}
参数形式变成了:类型+三个黑点+参数名
作用
(1)可以再不知道参数个数的情况下传入对象进去。
(2)可以为应用于单个参数或多个参数。
举例说明:

public class NewVarArgs {        static void printArray(Object ...  args) {       for(Object obj : args) {           System.out.print(obj+"      ");       }       System.out.println();}       public static void main(String[] args) {        printArray(new Integer(47),new Float(3.14),new Double(11.11));        printArray(47,3.14,11.11);        printArray("one","two","three");        printArray(new A(),new A(),new A());        printArray((Object[])new Integer[] {1,2,3,4},(Object[])new Integer[] {1,2,3,4});        printArray();       }}

运行结果截图为:
这里写图片描述

注意一点:main方法中倒数第二条语句是将两个Integer数组作为参数传入进去,args数组接收到的是两个对象,遍历时是遍历这两个对象(而不是每个对象里的东西),所以输出是Integer在包的位置和@符号加上Integer对象的地址位置。如果把mian方法中倒数第二条语句改为printArray((Object[])new Integer[] {1,2,3,4});的话那么,传入的就是一个对象,args数组就会是一个对象(传入的那个对象),就会遍历该对象里的每一个值。所以说可变参数适合多个参数和单个参数,但一定要注意两者的区别。

扩展用法:如果将上述main方法中的最后一行printArray()方法调用改为pringArray(1,2,new Integer(3),4);时,将单一的参数列表使用了混合类型,自动包装机制将有选择的将int参数提升为Integer。

有时会有这种情况
有两个重载函数:函数一为:public void f(float i,Charactor … args){..}
函数二为:public void f(Charactor … args){…}
如果main函数里有两个函数调用上述两个f函数时:f(1,’a’);
f(‘a’,’b’);就会产生编译错误(ComplieTimeError)

解决办法是:在某个方法中增加一个非可变参数来解决该问题。
如上例的解决办法为:将public void f(Charactor … args){…}改为public void f(char c,Charactor … args){…} 即可。

原创粉丝点击