JDK1.5新特性(可变参数和foreach)

1. 可变参数

假如有这样一个需求,用于计算任意参数的整数相加的结果。
这个需求在早期是用数组的方法来实现。
举例:早期实现方式(利用数组进行求和)

public class Test1{
    public static void main(String[] args) {
     //所有的参数,包装成int[]数组,相对比较麻烦
        System.out.println(add(new int[]{1,2,3}));  //6
        System.out.println(add(new int[]{4,5}));   //9
        System.out.println(add(new int[]{}));    //0
    }
    
	//int[]->引用数据类型
    private static int add(int[] array) {
		if(array == null){
            throw new RuntimeException("参数不能为空");
        }
        int sum =0 ;
        for(int i = 0; i<array.length; i++){
            sum += array[i];
        }
        return sum;
    }
}

举例:早期实现方式(方法重载)

public class Test1{

    public static int add(int a,int b){
        return a+b;
    }

    public static int add(int a,int b, int c){
        return a+b+c;
    }
    public static void main(String[] args) {
        System.out.println(add(1,2,3));  //6
        System.out.println(add(4,5));    //9

    }
}

以上两种方式都存在缺陷,当要求的是任意多个参数,而不是数组时,就无法实现,所以JDK1.5之后追加了可变参数的概念。
这种方法的定义格式为:public [static] [final] 返回值 方法名称([参数类型 参数名称] [参数类型...参数名称]){ }
其中的... 实际上表示一个数组的结构
举例:方法的可变参数

public class Test1{
    
    public static void main(String[] args) {

        System.out.println(add(1,2,3));   //6
        //可以传数组
        System.out.println(add(new int[]{4,5}));  //9
        //没有参数,自动包装成一个空数组
        System.out.println(add());   //0
    }

    //可变参数自动包装成一个数组
    private static int add(int...data) {
        int sum = 0;
        for(int i = 0;i<data.length; i++){
            sum+=data[i];
        }
        return  sum;
    }
}

注意: 如果要传递多个类型的可变参数,可变参数一定放在最后,并且只有一个可变参数
举例:传递多类可变参数

public class Test1{
    public static void main(String[] args) {
        System.out.println(add("hello"));  //0
        System.out.println(add("hello",1,2,3));  //6
        System.out.println(add("hello",new int[]{4,5}));  //9
    }

    //可变参数自动包装成一个数组
    private static int add(String str,int...data) {
        int sum = 0;
        for(int i = 0;i<data.length; i++){
            sum+=data[i];
        }
        return  sum;
    }
}

总结:

  1. 可变参数会自动包装成数组,使用时当做数组使用;
  2. 方法有多个参数类型时,可变参数需要放到参数列表之后;
  3. 方法的可变参数最多只有一个;
  4. 可变参数不传值时,包装了一个空数组,因此不会发生空指针异常。

2. foreach(增强for循环)

从JDK1.5后对for循环使用有了新格式:

for(数据类型 临时变量 : 数组(集合)){
	//循环次数为数组长度,而每一次循环都会顺序取出数组中的一个元素赋给临时变量
}

举例:使用foreach

 private static int add(String str,int...data) {
        int sum = 0;
        for (int a : data) {
            sum += a;
        }
        return  sum;
    }

猜你喜欢

转载自blog.csdn.net/mi_zhi_lu/article/details/90665234