zoukankan      html  css  js  c++  java
  • 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
        }
    }

    参考链接:http://www.runoob.com/w3cnote/java-varargs-parameter.html

  • 相关阅读:
    (转)OpenCV提取视频每一帧及将连续图片合成视频
    OpenCV对图像的性能测试
    (转)OpenCV中的常用函数
    EasyX-加载图像实现人物行走
    “三行情书”——给你三行代码的爱恋~
    EasyX—模拟小球自由落体
    maven的pom.xml配置文件
    spring常用注解
    sql优化
    idea快捷键
  • 原文地址:https://www.cnblogs.com/lfri/p/10553555.html
Copyright © 2011-2022 走看看