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. codeforces 493A. Vasya and Football 解题报告

    题目链接:http://codeforces.com/contest/493/problem/A 题目意思:给出两个字符串,分别代表 home 和 away.然后有 t 个player,每个playe ...

  2. Zookeeper WINDOWS 安装配置

    下载:zookeeper:http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz 解压zo ...

  3. 【编程题目】在一个字符串中找到第一个只出现一次的字符。如输入 abaccdeff,则输出 b。

    第 17 题(字符串):题目:在一个字符串中找到第一个只出现一次的字符.如输入 abaccdeff,则输出 b. 思路:此题非常容易. 最开始是想开辟一块空间存储每个字符出现的次数. 但转念一想,似乎 ...

  4. IOS-多线程技术

    三种: •NSThread: –优点:NSThread 比其他两个轻量级,使用简单 –缺点:需要自己管理线程的生命周期.线程同步.加锁.睡眠以及唤醒等.线程同步对数据的加锁会有一定的系统开销 •NSO ...

  5. HTML简历表格

    效果图 <!DOCTYPE > <html> <head> <meta charset="utf-8" /> </head&g ...

  6. oracle 监控

    sqlplus "/as sysdba" .监控当前数据库谁在运行什么SQL语句 SELECT osuser, username, sql_text from v$session ...

  7. iOS-Runtime-Headers

    iOS8.4 及之前的头文件 私有及共有API https://github.com/nst/iOS-Runtime-Headers  

  8. Java 回调机制的理解

    // 在接口中声明一个处理耗时操作结果的回调方法. // Local 实现这个接口,实现处理耗时操作结果的回调方法. // Local 获得 Remote 对象,在子线程中调用 Remote 的处理耗 ...

  9. C++面向对象基础知识

    多态是为了接口重用,封装和继承是为了代码重用 子类重新定义父类虚函数的方法叫做继承,不是重载! 一.基本概念 对于C++中经常出现的函数名称相同但是参数列表或者返回值不同的函数,主要存在三种情况: 1 ...

  10. Intel Code Challenge Elimination Round (Div.1 + Div.2, combined)(set容器里count函数以及加强for循环)

    题目链接:http://codeforces.com/contest/722/problem/D 1 #include <bits/stdc++.h> #include <iostr ...