[Java] Java中的可变参数方法
2015-10-21 18:41
357 查看
Java中的可变参数方法
1.可变参数方法描述
Java SE 5.0 以前的版本中,每个Java方法都有固定数量的参数,现在的版本提供了可以用可变参数数量调用的方法。Java 中省略号 … 是代码的一部分,它表明这个方法可以接受任意数量的对象(除fmt参数之外)。
2.可变参数方法举例
如:printf 方法调用System.out.printf("%d", n);和
System.out.printf("%d %s", n, "widgets");
在上面两条语句中,尽管一个调用包含两个参数,另一个调用包含三个参数,但它们调用的都是同一个方法。printf 方法是这样的定义的:
public class PrintStream { public PrintStream printf(String fmt, Object... args) { return format(fmt, args); } }
printf 方法接收两个参数,一个是格式字符串,另一个是 Object [ ] 数组,其中保存着所有的参数(如果调用者提供的是整型数组或其他基本类型值,自动装箱功能将把他们转换成对象)。现在将扫描 fmt 字符串,并将第 i 个格式说明符与 args[i] 的值匹配起来。对于 printf 实现来说, Object... 参数类型与 Object[ ] 类型完全一样。
编译器需要对 printf 的每次调用进行转换,以便将参数绑定到数组上,并在必要的时候自动装箱。
用户自己也可以定义可变参数的方法,并将参数指定为任意类型,甚至可以是基本类型。
3.用户自定义变参数方法
public class FirstSample { public static void main(String[] args) { double[] test = new double[]{1, 2, 3, 4, 5, 6}; System.out.println(max(test)); } public static double max(double... values) { double largest = Double.MIN_VALUE; for(double temp : values) { if(temp > largest) { largest = temp; } } return largest; } }
也可以这样调用
double m = max(3.1, 40.4, -5);
编译器将 new double[ ] {3.1, 40.4, -5} 传递给 max 方法。
4.注
允许讲一个数组传递给可变参数方法的最后一个参数,因此可以将已经存在一个参数是数组的方法重新定义为可变参数的方法而且不会破坏任何已经存在的代码。因此,我们阔以将 main 方法声明为下列形式:
public static void main (String... args)
5.参考文献
Java 核心技术 卷 I 基础知识(原书第九版) P189-P190相关文章推荐
- Java多线程:ThreadPoolExecutor详解
- 深入理解Java的接口和抽象类
- Java中native关键字
- spring mvc的moduleattribute
- 【Java】双等号和equals的区别
- spring中常用的util
- JAVA_SE基础——44.抽象类的练习
- 凭借对KMP算法的了解,用java实现了一下,结果和java自带的字符串indexOf比,性能差了十倍。。。
- JDK/bin下工具列表说明及归纳
- java参数传递
- java基础 内部类 简单总结
- springMVC--@requestBody
- java线程安全
- JAVA设计模式(12) —<结构型>享元模式(Flyweight)
- JAVA反射学习总
- java系统学习(十七) --------Swing组件与布局管理器
- java系统学习(十七) --------Swing组件与布局管理器
- eclipse中运行pig
- JAVA用flexpaper实现在线预览PDF文件
- Java反射获取一个类的所有get方法