黑马程序员—JDK1.5新特性(增强for循环、可变参数、静态导入)

时间:2023-02-18 11:57:54
------- android培训java培训、期待与您交流! ----------

 

增强for循环:foreach语句,foreach简化了迭代器

 * 增强for循环。格式:for (数据类型 变量名 :被遍历的集合(Collection)或者数组)
 *  {
 * 
 *  }
 * 
 *  可以对集合进行遍历,但是只能获取元素,不能对元素作出其他操作。
 * 
 *  迭代器:除了遍历,还可以进行remove集合中的元素。如果使用ListIterator,还可以在遍历过程中进行增删改查的动作。
 * 
 *  传统for循环和增强for循环有什么区别呢?
 *  增强for循环有一个局限性,必须有被遍历的目标。比如用增强for循环输出100次hello java,单靠增强for循环是做不到的。
 * 
 *  建议在遍历数组的时候使用传统for循环。因为传统for可以定义角标。通过角标操作元素。如果只为遍历获取,可以简化成高级for循环,它的出现为了简化书写。

高级for循环可以遍历Map集合,但要先将将Map转成set后再使用foreach语句。

代码示例:

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class ForEachDemo
{
public static void main(String[] args)
{
//创建一个ArrayList集合
Collection<String> c = new ArrayList<String>();
//向集合中添加元素
c.add("abcdefg");
c.add("cbvnmflgi");

//用增强for循环迭代打印出集合中的每一个元素
for (String s:c)
System.out.println(s);

//定义数组
int[] arr = {1,2,3,4,5,6,7};
//增强for循环迭代打印出数组中每一个元素
for (int i:arr)
sop(i);

//定义一个HashMap的集合
HashMap<Integer,String> hm = new HashMap();
//向集合中添加元素
hm.put(1, "er");
hm.put(2, "rf");
hm.put(3, "gh");
hm.put(4, "ji");
hm.put(5, "kl");

//获取键的Set集合
Set<Integer> keyset = hm.keySet();
//用增强for循环迭代打印Map集合中的键和对应的值
for (Integer i : keyset)
sop(i+"---"+hm.get(i));

//获取键值映射关系Map.Entry的Set集合
Set<Map.Entry<Integer, String>> se = hm.entrySet();
//用增强for循环迭代出Map.Entry映射关系中的键和值
for (Map.Entry<Integer, String> keyvalue : se)
sop(keyvalue.getKey()+"------"+keyvalue.getValue());

//这是上面代码的简化形式
for (Map.Entry<Integer, String> me : hm.entrySet())
sop(me.getKey()+"::::::::::"+me.getValue());
}

//打印功能
public static void sop(Object obj)
{
System.out.println(obj);
}
}


 

 

 

可变参数(...)用到函数的参数上,当要操作的同一个类型元素个数不确定的时候,可是用这个方式,这个参数可以接受任意个数的同一类型的数据。

 

和以前接收数组不一样的是:

以前定义数组类型,需要先创建一个数组对象,再将这个数组对象作为参数传递给函数。现在,直接将数组中的元素作为参数传递即可。底层其实是将这些元素进行数组的封装,而这个封装动作,是在底层完成的,被隐藏了。所以简化了用户的书写,少了调用者定义数组的动作。

如果在参数列表中使用了可变参数,可变参数必须定义在参数列表结尾(也就是必须是最后一个参数,否则编译会失败。)。

如果要获取多个int数的和呢?可以使用将多个int数封装到数组中,直接对数组求和即可。

 

代码示例:

/*JDK1.5版本的新特性。方法的可变参数。在使用时注意:可变参数一定要定义在参数列表的最后面。
* */

public class ParamMethodDemo
{
public static void main(String[] args)
{
//虽然少定义方法,但每次都要定义数组。作为实际参数。
//int[] arr = {1,2,3,4,5};
//show(arr);

show("str",1,2,3,4,5);
}

/*可变参数:其实就是上一种格式的简写格式。不用每一次都手动的建立数组对象。只要将要操作的元素作为参数传递即可。
* 隐式的将这些参数封装成了数组。
* */
public static void show(String Str, int ... arr)
{
for (int i : arr)
System.out.println(i);
}
}


 

 

静态导入:导入了类中的所有静态成员,简化静态成员的书写。

代码示例:

/*JDK1.5版本的新特性。静态导入。
* 当类名重名时,需要指定包名。
* 当方法名重名时,需要写上具体所属的类或者对象
* */
import static java.util.Arrays.*;//导入Arrays类中所有的静态成员。
import static java.lang.System.*; //导入System里面的所有静态成员。


 

 

------- android培训java培训、期待与您交流! ----------