[Java] Java中的可变参数方法

来源:互联网 发布:护理优化服务流程 编辑:程序博客网 时间:2024/06/06 03:18

可变参数方法描述

        Java SE 5.0 以前的版本中,每个Java方法都有固定数量的参数,现在的版本提供了可以用可变参数数量调用的方法。

        Java 中省略号 … 是代码的一部分,它表明这个方法可以接受任意数量的对象(除fmt参数之外)。

可变参数方法举例

        如: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 的每次调用进行转换,以便将参数绑定到数组上,并在必要的时候自动装箱。

        用户自己也可以定义可变参数的方法,并将参数指定为任意类型,甚至可以是基本类型。

用户自定义变参数方法

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 方法。

        允许讲一个数组传递给可变参数方法的最后一个参数,因此可以将已经存在一个参数是数组的方法重新定义为可变参数的方法而且不会破坏任何已经存在的代码。

        因此,我们阔以将 main 方法声明为下列形式:

public static void main (String... args)

参考文献

        Java 核心技术 卷 I 基础知识(原书第九版) P189-P190





0 0
原创粉丝点击