读书人

经验18-JDK新特性-静态导入、自动封装

发布时间: 2012-09-19 13:43:54 作者: rapoo

心得18--JDK新特性-静态导入、自动封装与拆装、增强for循环

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

读书人网 >编程

热点推荐