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

来源:互联网 发布:淘宝对纯棉全棉的定义 编辑:程序博客网 时间:2024/05/22 03:23

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

 

原创粉丝点击