Jdk一直在更新,其中的功能也一直在更新,接下来让我们学学jdk1.5版本以后的一些常用的特性:
Jdk5以后的新特性:
增强for,静态导入,可变参数,泛型,自动拆装箱...
增强for循环的格式:
for(数据大类型 变量名 : 数组或者集合对象名){
输出变量即可!
}
增强for的出现时替代迭代器的,所以在遍历集合或者遍历数组就可以使用增 强for去完成
增强for循环的弊端:如果集合的对象是null,如果再次对集合操作,就会出 现异常
对集合进行判断,非空判断解决
下面看看先看看增强for循环:
例如:
package com.jdk; import java.util.ArrayList; import java.util.List; public class TextDome { public static void main(String[] args) { //创建集合对象 List<String> list=new ArrayList<String>(); //添加元素 list.add("hello"); list.add("World"); list.add("javaSE"); //对集合进行非空判断,防止集合是空值 if(list!=null) { //增强for循环 for(String str:list) { System.out.println(str); } } } } 运行结果: hello World javaSE
上面学习了增强for循环,接下来再看看静态导入
静态导入的一个重要的前提:被调用的方法必须是静态的,在API中一些类的方法前面有static修饰的,才可以使用静态导入
第二个前提:使用静态导入时必须导入到一个方法的级别,而不是类的级别、
之前我们学过录入键盘对象导入的包是类级别的
例如:Import java.util.Scanner;
二者是有区别的,不能用错
静态导入的格式:
import static 包名.类名.方法名;
例如:
package com.静态导入; import static java.lang.Math.abs; import static java.lang.Math.pow; public class StaticDome { public static void main(String[] args) { //普通调用Math类方法 System.out.println("普通调用abs方法:"+Math.abs(-100)); //使用静态导入的方法去使用,直接写方法名去使用,但是前提必须使用了静态导入 System.out.println("使用静态导入:"+abs(-100)); // 当一个类中方法和被需要静态导入的方法名名字一致时,必须使用前缀 System.out.println(java.lang.Math.pow(2,3)); } public static void pow() { } } 运行结果: 普通调用abs方法:100 使用静态导入:100 8.0
可变参数
可变参数:当一个方法的参数个数不确定的时候,可以去使用可变参数,但是不建议经常使用这个特性,我们了解就好
格式:
修饰符 返回值类型 方法名(数据类型...变量名){...}
在上面的方法名后面的括号里的...这三个点一定要写全,不然会无法运行程序
注意:
1)变量名:看成一个数组
2)使用的时候要注意数据类型...
例如:
package com.argsDome; public class argsDome { public static void main(String[] args) { //可以根据自己需要的参数去输入即可 System.out.println("总和为:"+sum(10,20,30,40)); } public static int sum(int ...a) { //在这里将a看作是数组 //先定义result的初始值为0 int result=0; //增强for循环 for(int i:a) { result+=i; } return result; } } 运行结果: 总和为:100
对于数组类Arrays,有一个方法可以直接将数组转换成集合
public static <T> List<T> asList(T... a) :将数组转换成固定大小的集合
但是转换之后,集合的长度就会固定,不能发生改变,要想改变集合的长度,只能先去改变数组的长度,不能直接在集合上添加或者删除集合中的元素,否则会在运行时报错
例如:
package com.argsDome; import java.util.Arrays; import java.util.List; public class ArraysasListDome { public static void main(String[] args) { //先创建一个字符串数组 String[] s= {"hello","world","java"}; //也可以直接asList后面输入字符串,不用创建字符串数组 //List<String> list=Arrays.asList("hello","world","java"); //调用asList方法,返回值是集合List List<String> list=Arrays.asList(s); for(String str:list) { System.out.println(str); } System.out.println("-------------------------------"); //asList方法将数组转换成集合后,它的集合长度就是固定的不能再发生改变了,所以不能使用下面的添加和删除功能,在编译时没有问题,运行时就会报错 //list.add("javaSE"); //list.remove("java"); //虽然我们不可以改变集合的长度,替换集合里面的元素还是可以的 list.set(2, "javaSE"); //增强for循环 for(String str2:list) { System.out.println(str2); } } } 运行结果: hello world java ------------------------------- hello world javaSE
前面学了好多集合了,接下来我们看看集合的嵌套,并将集合遍历出来
在这里有这样的一个例题:
需求:
集合的嵌套遍历
有一个Java基础班,里面有很多学生,创建一个班级集合:ArrayList<Student>,不止一个Java基础班,这个时候就定义大集合:ArrayList<ArrayList<Student>>中有三个基础班,分别遍历每一个班里面学生信息:(name,age)
例如:
先创建一个自定义学生类
package com.ArraysListDome; public class Student { private String name; private int age; public Student() { super(); } public Student(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
再来创建一个测试类去进行集合的嵌套
package com.ArraysListDome; import java.util.ArrayList; public class ArraysListDome { public static void main(String[] args) { //创建大集合(班级集合) ArrayList<ArrayList<Student>> list=new ArrayList<ArrayList<Student>>(); //创建第一个小集合(java基础班) ArrayList<Student> list2=new ArrayList<Student>(); //创建学生对象 Student s1=new Student("迪丽热巴",27); Student s2=new Student("高雯",25); Student s3=new Student("赵星星",24); //将学生对象添加到集合中 list2.add(s1); list2.add(s2); list2.add(s3); //将第一个小集合添加到大集合中去 list.add(list2); //创建第二个小集合 ArrayList<Student> list3=new ArrayList<Student>(); //创建学生对象 Student s4=new Student("吴宣仪",25); Student s5=new Student("孟美岐",26); Student s6=new Student("杨超越",25); //将学生对象添加到第二个小集合中去 list3.add(s4); list3.add(s5); list3.add(s6); //将第二个小集合添加到大集合中去 list.add(list3); //创建第三个小集合 ArrayList<Student> list4=new ArrayList<Student>(); //创建学生对象 Student s7=new Student("宋茜",32); Student s8=new Student("刘亦菲",35); Student s9=new Student("宋祖儿",24); //将学生对象添加到第三个小集合中 list4.add(s7); list4.add(s8); list4.add(s9); //将第三个小集合添加到大集合中去 list.add(list4); //增强for循环,遍历大集合中的学生对象 for(ArrayList<Student> st:list) { for(Student s:st) { System.out.println(s.getName()+"---"+s.getAge()); } } } } 运行结果: 迪丽热巴---27 高雯---25 赵星星---24 吴宣仪---25 孟美岐---26 杨超越---25 宋茜---32 刘亦菲---35 宋祖儿---24