相关阅读
【小家java】java5新特性(简述十大新特性) 重要一跃
【小家java】java6新特性(简述十大新特性) 鸡肋升级
【小家java】java7新特性(简述八大新特性) 不温不火
【小家java】java8新特性(简述十大新特性) 饱受赞誉
【小家java】java9新特性(简述十大新特性) 褒贬不一
【小家java】java10新特性(简述十大新特性) 小步迭代
【小家java】java11新特性(简述八大新特性) 首个重磅LTS版本
1、概述
java一共提供了3中循环语法:for循环(含增强for循环)、while循环、do…while循环。java8之后提供了基于stream的foreach循环,然后本文就针对于这几个循环,分别介绍一下循环控制语句:break,continue,return对循环体的影响。
特别隆重介绍:foreach循环中,如何停止本次循环和停止所有循环,因为stream的使用非常方便和广泛
2、栗子
最先开始,直接上主菜for循环,后面再介绍稍微简单的例子while循环等。
先来看一个最简单的循环体:
public static void main(String[] args) { for (int i = 0; i < 10; i++) { System.out.print(i + ","); } } 输出: 0,1,2,3,4,5,6,7,8,9,
接下来,我们加入一些循环控制语句,看看效果:
public static void main(String[] args) { for (int i = 0; i < 10; i++) { if (i < 5) { continue; } System.out.print(i + ","); } } 输出: 5,6,7,8,9, public static void main(String[] args) { for (int i = 0; i < 10; i++) { System.out.print(i + ","); if (i < 5) { break; } } } 输出: 0, public static void main(String[] args) { for (int i = 0; i < 10; i++) { System.out.print(i + ","); if (i < 5) { return; //return false; //编译报错 //return true; //编译报错 } } } 输出: 0,
从结果中很容易看出,for循环里的continue是结束本次循环继续下一次循环,break是结束当前for所有循环。而return表面上看效果和break一样,确实如此。但是,但是,但是需要注意:return其实是退出方法,它退出的层次是很高的,如果方法体只有一个for循环,效果一样。因此不同的场景,有时候用break,有时候用return,需要注意。
若只想退出for循环,并不想退出方法体,用break;
若退出for循环并且退出方法体,用return;
接下来简单说一下增强for循环(JDK5以后的新特性):
public static void main(String[] args) { List<String> lists = new ArrayList<>(); lists.add("a"); lists.add("b"); for (String str : lists) { System.out.print(str + ","); } } 输出: a,b,
这里不介绍增强for的循环控制,我简要解释一下增强for其实只是个语法糖,大家就理解了。把我编译之后的.class文件的增前for贴出来,大家应该就不需要继续介绍了:
上面增强for编译过后代码如下: public static void main(String[] args) { List<String> lists = new ArrayList(); lists.add("a"); lists.add("b"); Iterator var2 = lists.iterator(); while(var2.hasNext()) { String str = (String)var2.next(); System.out.print(str + ","); } }
我们发现增强for循环遍历和iterator遍历反编译后的字节码完全一样,所以增强for不用解释了,直接参考for循环和while循环的一些特点就行了
接下来,最重要的主菜登场:foreach循环。
随着java8的普及,基于流式的编程日益普及。它能使得代码的结构越发清晰并且效率也是大大的提升啊,因此我们平时在使用foreach循环的频率就越高了。但是大家或多或少都遇见类似头疼的问题:发现continue和break甚至return语法对foreach循环都不好使了