1. “JDK 5.0”的一个重要主题就是通过新增一些特性来简化开发,这些特性包括:
• 静态导入
• 自动装包/拆包
• for-each循环
• 可变参数
• 枚举
• 泛型
• 元数据
静态导入语法用于导入指定类的某个静态属性值(方法)或全部静态属性值(方法)。语法:Import static 包名.类名.静态属性|静态方法|*;比如:导入指定类全部静态属性和方法 import staticjava.lang.Math.*
自动装箱(autoboxing):把一个基本数据类型直接赋给对应的包装类变量, 或者赋给 Object 变量
自动拆箱:把包装类对象直接赋给一个对应的基本类型变量
2. 增强for循环
引入增强for循环的原因:在JDK5以前的版本中,遍历数组或集合中的元素,需先获得数组的长度或集合的迭代器,比较麻烦!为了简化此类操作,JDK5中新添了增强for循环。增强for循环只能用在数组、或实现Iterator接口的集合类上
使用 foreach 循环遍历数组和集合元素时, 无须获得数组和集合长度, 无须根据索引来访问数组元素和集合元素,foreach 循环自动遍历数组和集合的每个元素
l 语法格式:
• for ( type 变量名:集合变量名 ) { … }
//变量名: 自动迭代访问每一个元素
具体案例分析:
package com.java.test;
importjava.util.ArrayList;
import java.util.Iterator;
importjava.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
importjava.util.Map.Entry;
public class ForTest {
public void Test() {
// 不使用泛型遍历list:
List list = new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
for (Object str : list) { //因为list是List对象类型的,所以遍历的时候用用Object类型声明变量str
System.out.println(str);
}
// 使用泛型遍历list:
List<String> list1 = new ArrayList<String>();
list1.add("aaa");
list1.add("bbb");
list1.add("ccc");
for (String str : list1) { //这里给定List的泛型类型是String,那么这是遍历的时候就可以用String声明了
System.out.println(str);
}
}
//通过map.keySet()把键值取出,遍历
public void Test1() {
Map map = new LinkedHashMap();
map.put("1", "aaa");
map.put("2", "bbb");
map.put("3", "ccc");
Set keys = map.keySet();
Iterator it = keys.iterator();
while (it.hasNext()) {
String key = (String)it.next();
String value = (String) map.get(key);
System.out.println(key + "=" + value);
}
}
// 通过map.entrySet()把键值对取出,一块遍历
public void Test2() {
Map map = new LinkedHashMap();
map.put("1", "aaa");
map.put("2", "bbb");
map.put("3", "ccc");
Set keys = map.entrySet();
Iterator it = keys.iterator();
while (it.hasNext()) {
Map.Entry me = (Entry) it.next();
String key = (String) me.getKey();
String value = (String) me.getValue();
System.out.println(key + "=" + value);
}
}
//增强for循环的做法
public void Test3() {
Map map = new LinkedHashMap();
map.put("1", "aaa");
map.put("2", "bbb");
map.put("3", "ccc");
for (Object obj : map.entrySet()) {
Map.Entry me = (Entry) obj;
System.out.println(me.getKey() + "=" +me.getValue());
}
}
//使用JavaBean遍历
public void Test4() {
List<Person> list = new ArrayList<Person>();
list.add(new Person("jine", 20));
list.add(new Person("hello", 24));
list.add(new Person("电石法", 22));
for (Person p : list) {
System.out.println(p.getName() + "....." +p.getAge());
}
}
}
注意事项:
运用增强for循环只能遍历数组或继承Iterator的集合,不能给其赋值;也不能修改其值
案例一:(赋值失败案例)
intarr[] = new int[5];
for(intnum : arr){
num = 1;
}
System.out.println(arr[0]); // 输出结果为0,不是1
案例二:(修改值失败案例)
List<String>list = new ArrayList<String>();
list.add("xxx");
for(Stringstr : list){
str = "yyy";
}
System.out.println(list.get(0)); //输出结果为xxx,并非yyy