Java流程控制可大致分为以下几部分:
1.复合语句:与C语言及其他语言相同,Java语言的复合语句是以整个块区为单位的语句,所以又称块语句。复合语句由开括号“{”开始,闭括号“}”结束。
2.条件语句:条件语句可根据不同的条件执行不同的语句。包括if条件语句和switch多分支语句。
3.循环语句:while循环、do while循环、for循环、foreach循环
一.if条件语句
if条件语句是一个重要的编程语句,用于告诉程序在某个条件成立的情况下执行某段语句,而另一种情况下执行另外的语句。
使用if条件语句,可选择是否要执行紧跟在条件之后的那个语句。关键字if之后是作为条件的“布尔表达式”,如果该表达式返回的结果为true,则执行其后的语句;若为false,则不执行if条件之后的语句。if条件可分为简单的if条件语句、if...else语句和if...else if多分支语句。
1.简单的if条件语句
语法如下:
if(布尔表达式){ 语句序列 }
2.if...else语句
语法如下:
if(布尔表达式){ 若干语句 }else{ 若干语句 }
3.if...else if多分支语句
语法如下:
if(条件表达式1){ 语句序列1 }else if(条件表达式2){ 语句序列2 } ... else if(表达式n){ 语句序列n }
二.switch多分支语句
语法如下:
switch(表达式){ case 常量1: 语句块1 break; ... case 常量n: 语句块n break; default: 语句块n+1 break; }
三.循环语句
1.while循环语句
语法如下:
while(条件表达式){ 执行语句 }
2.do...while循环语句
语法如下:
do{ 执行语句 }while(条件表达式);
do...while循环语句与while循环语句类似,它们之间的区别是while语句为先判断条件是否成立再执行循环体,而do...while循环语句则先执行一次循环后,再判断条件是否成立。也就是说,do...while循环语句中“{}”中的程序至少要被执行一次。
注:do...while循环语句与while语句的一个明显区别是,do...while语句在结尾多了一个分号(;)。
3.for循环语句
语法如下:
for(表达式1;表达式2;表达式3){ 语句序列 }
表达式1:初始化表达式,负责完成变量的初始化
表达式2:循环条件表达式,值为boolean型的表达式,指定循环条件
表达式3:循环后操作表达式,负责修整变量,改变循环条件
在执行for循环时,首先执行表达式1,完成某一变量的初始化工作;下一步判断表达式2的值,若表达式2的值为true,则进入循环体;在执行完循环体后紧接着计算表达式3,这部分通常是增加或减少循环控制变量的一个表达式。这样一轮循环就结束了。第二轮循环从计算表达式2开始,若表达式2返回true,则继续循环,否则跳出整个for语句。
4.foreach循环语句
foreach语句是for语句的特殊简化版本,不能完全取代for语句,但任何foreach语句都可以改写为for语句版本。foreach并不是一个关键字,习惯上将这种特殊的for语句格式称为foreach语句。
语法如下:
for(元素变量 x:遍历对象 obj){ 引用了x的java语句 }
foreach语句中的元素变量x,不必对其进行初始化。下面通过简单的例子来介绍foreach语句是如何遍历一维数组的。
package com.it.cast.cn; public class Repetition { public static void main(String[] args) { int[] arr = {7, 10, 1}; System.out.println("一维数组中的元素分别为: "); for (int x : arr) { System.out.println(x); } } }
四.循环控制
循环控制包含两个方面的内容,一方面是控制循环变量的变化方式,另一方面是控制循环的跳转。
控制循环的跳转需要用到break和continue两个关键字,这两条跳转语句的跳转效果不同,break是中断循环,continue是执行下一次循环。
1.break语句:使用break语句可以跳出switch结构。在循环结构中,同样可以用break语句跳出当前循环体,从而中断当前循环。
使用break跳出循环:
package com.it.cast.cn; public class BreakTest { public static void main(String[] args) { for (int i = 0; i <= 100; i++) { System.out.println(i); if (i==6){ //如果i等于6则跳出循环 break; } } System.out.println("---end---"); } }
在嵌套的循环中使用break跳出内层循环:
package com.it.cast.cn; public class BreakInsideNested { public static void main(String[] args) { for (int i = 0; i <3; i++) { for (int j = 0; j <6; j++) { if (j==4){ //如果j等于4就结束内部循环 break; } System.out.println("i="+i+" j="+j); } } } }
用带有标签的break跳出外层循环:
package com.it.cast.cn; public class BreakOutsideNested { public static void main(String[] args) { Loop: for (int i = 0; i < 3; i++) { //在for循环前用标签标记 for (int j = 0; j < 6; j++) { if (j==4){ //如果j等4就结束外层循环 break Loop; //跳出Loop标签标记的循环体 } System.out.println("i="+i+" j="+j); } } } }
2.continue语句:continue语句是针对break语句的补充。continue不是立即跳出循环体,而是跳出本次循环结束前的语句,回到循环的条件测试部分,重新开始执行循环。在for循环语句中遇到continue后,首先执行循环的增量部分,然后进行条件测试。在while和do...while循环中,continue语句使控制直接回到条件测试部分。
输出1~20之间的奇数,使用continue跳出循环:
package com.it.cast.cn; public class ContinueTest { public static void main(String[] args) { for (int i = 0; i < 20; i++) { if (i % 2 == 0) { //如果i是偶数 continue; //跳到下一循环 } System.out.println(i); //输出i的值 } } }
与break语句一样,continue也支持标签功能,语法如下:
标签名:循环体{ continue 标签名; }
标签名:任意标识符
循环体:任意循环语句
continue标签名:continue跳出制定的循环体,此循环体的标签名必须与continue的标签名一致。