java学习之路--参数数量可变的方法

在java SE 5.0之前,每个Java方法都有固定数量的参数。然而,现在的版本提供了可以用可变的参数数量调用的方法(变参)
如方法:printf 调用:

System.out.printf("%d",n);

System.out.printf("%d %s",n,"widets");

在上面两条语句中,尽管一个调用包含两个参数,另一个调用包含三个参数,但他们调用的是同一个方法。
printf方法是这样定义的:

public class PrintStream
{
 public PrintStream printf(String fmt,Object......args){return format(fmt,args);}
}

这里的省略号是Java代码的一部分,它表明这个方法可以接受任意数量的对象(除fmt参数之外)。
实际上,printf方法接收两个参数,一个是格式字符串,另一个是Object[]数组,其中保存着所有的参数。现在将扫描fmt字符串,并将第i个格式说明符与args[i]的值匹配起来。
对于printf的实现者来说,Object…参数类型和Object[]完全一样。
编译器需要对printf的每次调用进行转换,以便将参数绑定到数组上,并在必要的时候进行自动装箱:

System.out.printf("%d %s",new Object[] { new Interger(n),"widgets"});

用户也可以自己定义可变参数的方法,并将参数指定为任意类型,甚至是基本类型。下面是一个简单的示例:其功能为计算若干个数值的最大值。

public static double max(double... values)
{
 double largest=Double.NEGATIVE_INFINITY;
 for(double v:values) if (v>largest) largest=v;
 return largest;
 }

可以像下面这样调用这个方法:

double m=max(3.1,40.4,-5);

编译器将new double[] {3.1,40.4,-5} 传递给max方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值