• JAVA5 特性:可变参数


    JAVA5 特性

    可变参数

    1. 使用目的

    在 Java 中,类里面的方法如果不确定要传入某一个类型的参数的个数,可以使用可变参数传参。

    	public static void main(String[] args) {
    		printStr("1","2","3");
    	}
    
    	private static void printStr(String...strs){
    		for (String str : strs) {
    			System.err.println(str);
    		}
    	}
    

    2.使用方法

    • Java支持传递同类型的可变参数给一个方法
    • 一个方法中只能指定一个可变参数
    • 可变参数必须是方法的最后一个参数。任何普通的参数必须在它之前声明
    返回值类型 方法名称(类型...参数名称){ // 在方法声明中,在指定参数类型后加一个省略号(...) 
        // 方法体
    }
    
    private static void printStr(int a, String...strs){
        for (String str : strs) {
            System.out.println(str);
        }
    }
    

    调用含有可变参数的方法时:

    • 可以不写参数,即传入空参;
    • 可以直接在里边写入参数,参数间用逗号隔开;
    • 可以传入一个数组
    public static void main(String[] args) {
        String[] strs = {"a","b","c"};
        printStr();
        printStr(strs);
        printStr("1","2","3");
    }
    
    • 拥有可变参数的方法可以被重载,在调用方法的时候,如果能够和固定参数的方法匹配,也能够与可变长参数的方法匹配,则选择固定参数的方法。
    • 如果重载的两个方法中都出现了可变参数,并且在调用时会引起歧义,则报错。
    private static void printStr(String...strs){
        for (String str : strs) {
            System.out.println(str);
        }
    }
    
    private static void printStr(Integer i, String...strs){
        for (String str : strs) {
            System.out.println(str);
        }
    }
    // 当 printStr("a","b","c"); 时,会与第一个printStr方法产生歧义
    private static void printStr(String s, String...strs){
        for (String str : strs) {
            System.out.println(str);
        }
    }
    
    • 可变参数可以兼容数组参数,但数组参数无法兼容可变参数。如果直接使用数组类型作为形参,那么在调用方法的传入的实参是需要固定长度的,而使用可变参数则没有这个问题
    // printStr(array) 可以
    private static void printStr(String...strs){
        for (String str : strs) {
            System.out.println(str);
        }
    }
    // 两个方法在调用时,会产生歧义
    // printStr("a","b","c") 不可以
    private static void printStr(String[] strs){
        for (String str : strs) {
            System.out.println(str);
        }
    }
    

    3.使用规范

    • 避免将带有可变参数的方法进行重载,即便可以这样做。

    • 尽量避免传递空值。

    • 重写含可变参数的方法时,参数不能变,要遵守重写的规范。

      1. 重写方法不能缩小访问权限;
      2. 参数列表必须与被重写方法相同(包括显示形式);
      3. 返回类型必须与被重写方法的相同或是其子类;
      4. 重写方法不能抛出新的异常,或者超过了父类范围的异常,但是可以抛出更少、更有限的异常,或者不抛出异常。
      
  • 相关阅读:
    HDU2222 自动机(学习中)
    POJ 2289(多重匹配+二分)
    POJ 1486二分图的必要边
    二分图
    2015陕西 并查集
    Hdu2680 最短路
    函数调用约定
    用01随机函数构造[a,b]整数范围随机数
    hello
    Ubuntu 16.04 install R language
  • 原文地址:https://www.cnblogs.com/wzbury/p/13345282.html
Copyright © 2020-2023  润新知