JDK1.5新特性
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;
}
}
总结:
- 可变参数会自动包装成数组,使用时当做数组使用;
- 方法有多个参数类型时,可变参数需要放到参数列表之后;
- 方法的可变参数最多只有一个;
- 可变参数不传值时,包装了一个空数组,因此不会发生空指针异常。
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;
}