JDK1.5加入的增强for和循环.

foreach语句使用总结

增强for(part1:part2){part3};

part2中是一个数组对象,或者是带有泛性的集合. 
part1定义了一个局部变量,这个局部变量的类型与part2中的对象元素的类型是一致的. 
part3当然还是循环体.

 
foreach语句是java5的新特征之一,在遍历数组、集合方面,foreach为开发人员提供了极大的方便。
 
foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句,然而,任何的foreach语句都可以改写为for语句版本。
 
foreach并不是一个关键字,习惯上将这种特殊的for语句格式称之为“foreach”语句。从英文字面意思理解foreach也就是“for 每一个”的意思。实际上也就是这个意思。
 
foreach的语句格式:
for(元素类型t 元素变量x : 遍历对象obj){
     引用了x的java语句;
}
 
下面通过两个例子简单例子看看foreach是如何简化编程的。代码如下:
 
一、foreach简化数组和集合的遍历
 
import java.util.Arrays; 
import java.util.List; 
import java.util.ArrayList;

public class TestArray { 
public static void main(String args[]) { 
TestArray test = new TestArray(); 
test.test1(); 
test.listToArray(); 
test.testArray3();

}

/** 
* foreach语句输出一维数组 
*/ 
public void test1() { 
//定义并初始化一个数组 
int arr[] = {2, 3, 1}; 
System.out.println("----1----排序前的一维数组"); 
for (int x : arr) { 
System.out.println(x); //逐个输出数组元素的值 
}

//对数组排序 
Arrays.sort(arr);

//利用java新特性for each循环输出数组 
System.out.println("----1----排序后的一维数组"); 
for (int x : arr) { 
System.out.println(x); //逐个输出数组元素的值 

}

/** 
* 集合转换为一维数组 
*/ 
public void listToArray() { 
//创建List并添加元素 
List<String> list = new ArrayList<String>(); 
list.add("1"); 
list.add("3"); 
list.add("4");

//利用froeach语句输出集合元素 
System.out.println("----2----froeach语句输出集合元素"); 
for (String x : list) { 
System.out.println(x); 
}

//将ArrayList转换为数组 
Object s[] = list.toArray();

//利用froeach语句输出集合元素 
System.out.println("----2----froeach语句输出集合转换而来的数组元素"); 
for (Object x : s) { 
System.out.println(x.toString()); //逐个输出数组元素的值 

}

/** 
* foreach输出二维数组测试 
*/ 
public void testArray2() { 
int arr2[][] = {{4, 3}, {1, 2}}; 
System.out.println("----3----foreach输出二维数组测试"); 
for (int x[] : arr2) { 
for (int e : x) { 
System.out.println(e); //逐个输出数组元素的值 


}

/** 
* foreach输出三维数组 
*/ 
public void testArray3() { 
int arr[][][] = { 
{{1, 2}, {3, 4}}, 
{{5, 6}, {7, 8}} 
};

System.out.println("----4----foreach输出三维数组测试"); 
for (int[][] a2 : arr) { 
for (int[] a1 : a2) { 
for (int x : a1) { 
System.out.println(x); 




}

 
运行结果:
----1----排序前的一维数组 



----1----排序后的一维数组 



----2----froeach语句输出集合元素 



----2----froeach语句输出集合转换而来的数组元素 



----4----foreach输出三维数组测试 







8

Process finished with exit code 0

 
二、foreach语句的局限性
 
通过上面的例子可以发现,如果要引用数组或者集合的索引,则foreach语句无法做到,foreach仅仅老老实实地遍历数组或者集合一遍。下面看一个例子就明白了:
 
public class TestArray2 {

public static void main(String args[]) { 
//定义一个一维数组 
int arr[] = new int[4]; 
System.out.println("----未赋值前输出刚刚定义的数组----"); 
for (int x : arr) { 
System.out.println(x); 
}

//通过索引给数组元素赋值 
System.out.println("----通过循环变量给数组元素赋值----"); 
for (int i = 3; i > 0; i--) { 
arr[i] = i; 

//循环输出创建的数组 
System.out.println("----赋值后,foreach输出创建好的数组----"); 
for (int x : arr) { 
System.out.println(x); 


}

运行结果:
 
----未赋值前输出刚刚定义的数组---- 




----通过循环变量给数组元素赋值---- 
----赋值后,foreach输出创建好的数组---- 



3

Process finished with exit code 0

 
三、总结
 

foreach语句是for语句特殊情况下的增强版本,简化了编程,提高了代码的可读性和安全性(不用怕数组越界)。相对老的for语句来说是个很好的补充。提倡能用foreach的地方就不要再用for了。在用到对集合或者数组索引的情况下,foreach显得力不从心,这个时候是用for语句的时候了。foreach一般结合泛型使用

Java 中新增的 foreach 的用法的更多相关文章

  1. JAVA中字符串函数subString的用法小结

    本篇文章主要是对JAVA中字符串函数subString的用法进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 String str; str=str.substring(int begi ...

  2. 【Java学习笔记之二十九】Java中的"equals"和"=="的用法及区别

    Java中的"equals"和"=="的用法及区别 在初学Java时,可能会经常碰到下面的代码: String str1 = new String(" ...

  3. java中 this 的三种用法

    Java中this的三种用法 调用属性 (1)this可以调用本类中的任何成员变量 调用方法(可省略) (2)this调用本类中的成员方法(在main方法里面没有办法通过this调用) 调用构造方法 ...

  4. Java中枚举的写法和用法

            在公司代码中,用了一大堆的枚举,看得我好懵逼.下面开始看看枚举怎么写和怎么用. 一.枚举的写法         关于枚举的写法,网上好多这方面的知识.这里直接贴一个我自己写的枚举类的代 ...

  5. Java中try,catch,finally的用法

    Java中try,catch,finally的用法,以前感觉还算熟悉,但看到一篇博文才有更深点的理解,总结网友博客如下. Java异常处理的组合方式: 1.try+catch  运行流程:运行到try ...

  6. 关于java中for和foreach循环

    for循环中的循环条件中的变量只求一次值!具体看最后的图片 foreach语句是java5新增,在遍历数组.集合的时候,foreach拥有不错的性能. foreach是for语句的简化,但是forea ...

  7. ES5中新增的forEach等新方法的一些使用声明

    转载地址:http://www.zhangxinxu.com/wordpress/?p=3220 一.前言-索引 ES5中新增的不少东西,了解之对我们写JavaScript会有不少帮助,比如数组这块, ...

  8. java中super的两种用法

    通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程度上可以说它类似于C语言中的全局函数和全局变量.但是,并不是说有了这种便利,你便可以随处使用,如果那样的话,你便需要认真考虑一下自 ...

  9. Java中super的几种用法并与this的区别

    1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位. class Base { Base() { System.out.println("Base"); ...

随机推荐

  1. Binary String Matching

    问题 B: Binary String Matching 时间限制: 3 Sec  内存限制: 128 MB提交: 4  解决: 2[提交][状态][讨论版] 题目描述 Given two strin ...

  2. java调用cmd命令删除文件夹及其所有内容

    /** * *删除D盘下面test目录,感觉以前用io流遍历删除好慢! * **/ public static void main(String[] args) { Runtime run = Run ...

  3. MFC添加菜单事件

    双击draw.rc,就能看到.

  4. LTS学习

    下载 例子 安装部署zookeeper 运行根目录下的sh build.sh或build.cmd脚本 --> 会在dist目录下生成lts-{version}-bin文件夹(bin里有启动命令) ...

  5. bat批量删.svn

    ==================1======================= Bat代码 收藏代码 @echo off :start ::启动过程,切换目录 set pwd=%cd% cd % ...

  6. poj2492(种类并查集/各种解法)

    题目链接: http://poj.org/problem?id=2492 题意: 有t组测试数据, 对于每组数据,第一行n, m分别表示昆虫的数目和接下来m行x, y, x, y表示教授判断x, y为 ...

  7. Android Programming: Pushing the Limits -- Chapter 7:Android IPC -- Messenger

    Messenger类实际是对Aidl方式的一层封装.本文只是对如何在Service中使用Messenger类实现与客户端的通信进行讲解,对Messenger的底层不做说明.阅读Android Prog ...

  8. max number of threads [1024] for user [lish] likely too low, increase to at least [2048]

    # cat /etc/security/limits.d/-nproc.conf # Default limit for number of user's processes to prevent # ...

  9. (1)第一个ASP.NET Web API

      Install-Package Microsoft.AspNet.WebApi . Global.asax protected void Application_Start() { AreaReg ...

  10. jQuery 操作复选框(checkbox) attr checked不起作用

    参考资料 http://www.paobuke.com/develop/javascript/pbk849.html   这天用到jQuery功能,想实现一个简单的复选框动态全选或全不选,结果测试发现 ...