您的位置:首页 > 编程语言 > Java开发

java方法的可变参数用法

2017-12-21 17:42 239 查看
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){…} 即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: