动力节点口口相传的Java黄埔军校
Java可变长参数列表详解
2019-09-05 来源:动力节点

  

今天动力节点java培训机构小编为大家介绍“Java可变长参数列表详解”,希望此文能够帮助到大家,下面就随小编一起看看Java可变长参数列表详解的内容吧。


timg (3).jpg


Java中定义了变长参数,允许在调用方法时传入不定长度的参数。


  Java可变长参数定义及调用


  在定义方法时,在最后一个形参后加上三点 …,就表示该形参可以接受多个参数值,多个参数值被当成数组传入。上述定义有几个要点需要注意:


  可变参数只能作为函数的最后一个参数,但其前面可以有也可以没有任何其他参数


  由于可变参数必须是最后一个参数,所以一个函数最多只能有一个可变参数


  Java的可变参数,会被编译器转型为一个数组


  变长参数在编译为字节码后,在方法签名中就是以数组形态出现的。这两个方法的签名是一致的,不能作为方法的重载。如果同时出现,是不能编译通过的。可变参数可以兼容数组,反之则不成立


public void foo(String...varargs){}


foo("arg1", "arg2", "arg3");


//上述过程和下面的调用是等价的

foo(new String[]{"arg1", "arg2", "arg3"});

 

例如,求任意个整数的乘积。


package exercise;


public class product {

    public static int func(int... args){

        int ret = 1;

        for(int i:args)  ret *= i;

        return ret;

    }

    public static void main(String[] args){

        System.out.println(func(1,2,3));

        System.out.println(func(2,2,2,2,2,2));

        System.out.println(func(100,1000));

    }

}


  由于可变长参数就是被编译器转化为数组实现的,我们完全可以写成以数组做参数的形式:


package exercise;


public class product {

    public static int func(int[] args){

        int ret = 1;

        for(int i:args)  ret *= i;

        return ret;

    }

    public static void main(String[] args){

        System.out.println(func(new int[]{1,2,3}));

        System.out.println(func(new int[]{2,2,2,2,2,2}));

        System.out.println(func(new int[]{100,1000}));

    }

}



方法重载


优先匹配固定参数


调用一个被重载的方法时,如果此调用既能够和固定参数的重载方法匹配,也能够与可变长参数的重载方法匹配,则选择固定参数的方法:


public class Varargs {


    public static void test(String... args) {

        System.out.println("version 1");

    }


    public static void test(String arg1, String arg2) {

        System.out.println("version 2");

    }

    public static void main(String[] args) {

        test("a","b");     //version 2 优先匹配固定参数的重载方法

                test();    //version 1

    }

}


匹配多个可变参数


  调用一个被重载的方法时,如果此调用既能够和两个可变长参数的重载方法匹配,则编译出错:


public class Varargs {


    public static void test(String... args) {

        System.out.println("version 1");

    }


    public static void test(String arg1, String... arg2) {

        System.out.println("version 2");

    }

    public static void main(String[] args) {

        test("a","b");  //Compile error

    }

}


以上就是动力节点java培训机构小编介绍的“Java可变长参数列表详解”的内容,希望对大家有帮助,更多java最新资讯内容继续关注动力节点java培训机构官网,每天会有精彩内容分享与你。


相关免费视频教程推荐


java编程入门教程下载——可变长参数:http://www.bjpowernode.com/xiazai/2528.html


开班信息

同类文章

微信搜索“动力节点Java学院“或扫二维码

关注官方微信免费领学习资料

动力节点Java培训机构,行业口碑最好的Java培训机构。

立即抢名额