JDK 5 之后的新特性
Jdk5以后的新特性:
增强for,静态导入,可变参数,泛型......(1)增强for循环
格式:for(数据大类型 变量名 : 数组或者集合对象名){
输出变量即可!
}
增强for的出现时替代迭代器的,所以在遍历集合或者遍历数组就可以使用增强for去完成
增强for循环的弊端:如果集合的对象是null,如果再次对集合操作,就会出现异常
对集合进行判断,非空判断解决
public class Demo_01 { public static void main(String[] args) { //创建一个ArrayList集合 ArrayList<String> as=new ArrayList<String>(); //添加元素 as.add("aaa1"); as.add("aaa2"); as.add("aaa3"); as.add("aaa1"); //使用增强for循环遍历 for(String s : as) { System.out.println(s); } //定义一个数组 int[] s= {12,34,56,74,87,53}; //用增强for循环遍历 for(int x:s) { System.out.println(x); } } } 显示: aaa1 aaa2 aaa3 aaa1 12 34 56 74 87 53
(2)可变参数:当一个方法的参数个数不确定的时候,要使用可变参数
格式:修饰符 返回值类型 方法名(数据类型...变量名){ //数据类型后的三个点就是可变参数的表现形式
方法体
}
例如:
//求数据的和 ppublic class Demo_02 { public static void main(String[] args) { int a=9; int b=4; int c=5; int d=7; int e=6; int f=23; int sum=plus(a,b,c,d,e,f); System.out.println(sum); } public static int plus(int x,int y) { int sum=0; sum=x+y; return sum; } public static int plus(int x,int y,int z) { int sum=0; sum=x+y+z; return sum; } public static int plus(int x,int y,int z,int t) { int sum=0; sum=x+y+z+t; return sum; } //当我们的参数不确定的情况下,就可以使用jdk5一个特性:可变参数,参数数据类型需相同 public static int plus(int...a) { //求和:将a是多个参数的,看成数组 //先定义最终结果变量 int sum = 0 ; //增强for遍历可变参数a for(int n :a) { sum += n ; } return sum; } } 结果:54
(3)静态导入
特点:1)前提是该方法必须是静态的
2)导入到的一个方法的级别
静态导入的格式:
import static 包名.类名.方法名;
用Math类来举例
import static java.lang.Math; //导入到包 Sysotem.out.println(Math.abs(100)); import static java.lang.Math.abs;//导入到方法的级别 Sysotem.out.println(abs(100)); System.out.println(java.lang.Math.abs(100));//可以直接导入 ,给方法加上前缀注意:本身当前的某个类中的方法名和需要被静态导入的方法名一样,必须加上前
(4)泛型
当ArrayList集合中存储了两种类型的元素分别String和Integer类型,在遍历的时候,使用的是String接收的,对于Integer类型就出现了异常!数组直接定义了存储的类型,防止出现其他类型的元素,集合能不能也像数组一样,直接规定我们集合的存储类型,针对这种情况就提供了新技术:泛型
泛型只能是引用类型
泛型的好处:
1)将运行时期异常提前到了编译时期
2)优化了设计,解决了黄色警告线问题
3)避免了强制类型转换
4)泛型的引出可以提供程序的安全性!
public class GenericDemo { public static void main(String[] args) { //创建集合对象 ArrayList<String> array = new ArrayList<String>() ; //添加元素 array.add("hello") ; array.add("world") ; array.add("java") ; //遍历 //获取迭代器 Iterator<String> it = array.iterator() ; while(it.hasNext()) { String s = it.next() ;//使用泛型此处不需要强制类型转换 System.out.println(s); } } }*泛型高级(通配符)
*<?> :代表任意类型Object类型,或者任意的Java类
*<? extends E>:向下限定,E的子类或者E这个类型
*<? super E>:向上限定,E及其他的父类
//<?> :代表任意类型Object类型,或者任意的Java类 Collection<?> c4 = new ArrayList<Object>() ; Collection<?> c5 = new ArrayList<Animal>() ; Collection<?> c6 = new ArrayList<Dog>() ; Collection<?> c7= new ArrayList<Cat>() ; <? extends E>:向下限定,E的子类或者E这个类型 Collection<? extends Object> c8 = new ArrayList<Object>() ; Collection<? extends Object> c9 = new ArrayList<Animal>() ; Collection<? extends Object> c10 = new ArrayList<Cat>() ; Collection<? extends Aninal> c11 = new ArrayList<Object>() ;//报错 <? super E>:向上限定,E及其他的父类 Collection<? super Animal> c12 = new ArrayList<Cat>() ;//报错 Collection<? super Animal> c13 = new ArrayList<Animal>() ; Collection<? super Animal> c14 = new ArrayList<Object>() ;