程序设计中的控制语句有三种,即顺序、分支和循环语句。Java程序通过控制语句来管理程序流,完成一定的任务。程序流是由若干个语句组成的,语句可以是一条单一的语句,也可以是一个用大括号({})括起来的复合语句。Java中的控制语句有以下几类:
分支语句:if和switch
循环语句:while、do-while和for
跳转语句:break、continue、return和throw

1.分支语句
分支语句提供了一种控制机制,使得程序具有了“判断能力”,能够像人类的大脑一样分析问题。分支语句又称条件语句,条件语句使部分程序可根据某些表达式的值被有选择地执行。Java编程语言提供了if和switch两种分支语句。

1.1 if语句
由if语句引导的选择结构有if结构、if-else结构和else-if结构三种。

if结构
如果条件表达式为true就执行语句组,否则就执行if结构后面的语句。如果语句组只有一条语句,可以省略大括号,当从编程规范角度不要省略大括号,省略大括号会是程序的可读性变差。语法结构如下:

if (条件表达式) {
     语句组
 }if-else结构


所有的语言都有这个结构,而且结构的格式基本相同,语句如下:

if (条件表达式) {
    语句组1
 } else {
    语句组2
 }


当程序执行到if语句时,先判断条件表达式,如果值为true,则执行语句组1,然后跳过else语句及语句组2,继续执行后面的语句。如果条件表达式的值为false,则忽略语句组1而直接执行语句组2,然后继续执行后面的语句。

else-if结构
else-if结构如下:

if (条件表达式1) {
     语句组1
 } else if (条件表达式2) {
     语句组2
 } else if (条件表达式3) {
     语句组3
 ...
 } else if (条件表达式n) {
     语句组n
 } else {
     语句组n+1
 }


else-if结构实际上是if-else结构的多层嵌套,它明显的特点就是在多个分支中只执行一个语句组,而其他分支都不执行,所以这种结构可以用于有多种判断结果的分支中。

1.2 switch语句
switch提供多分支程序结构语句。switch语句基本形式的语法结构,如下所示:

switch (表达式) {
     case 值1:
         语句组1
     case 值2:
         语句组2
     case 值3:
         语句组3
             ...
     case 判断值n:
         语句组n
     default:
         语句组n+1
 }


switch语句中“表达式”计算结果只能是int、byte、short和char类型,不能是long更不能其他的类型。每个case后面只能跟一个int、byte、short和char类型的常量,default语句可以省略。
当程序执行到switch语句时,先计算条件表达式的值,假设值为A,然后拿A与第1个case语句中的值1进行匹配,如果匹配则执行语句组1,语句组执行完成后不跳出switch,只有遇到break才跳出switch。如果A没有与第1个case语句匹配,则与第2个case语句进行匹配,如果匹配则执行语句组2,以此类推,直到执行语句组n。如果所有的case语句都没有执行,就执行default的语句组n+1,这时才跳出switch。

2.循环语句
循环语句能够使程序代码重复执行。Java支持三种循环构造类型:while、do-while、和for。for和while循环是在执行循环体之前测试循环条件,而do-while是在执行循环体之后测试循环条件。这就意味着for和while循环可能连一次循环体都未执行,而do-while将至少执行一次循环体。另外Java 5之后推出for-each循环语句,for-each循环是for循环的变形,它是专门为集合遍历而设计的,注意for-each并不是一个关键字。

2.1 while语句
while语句是一种先判断的循环结构,格式如下:
while (循环条件) {
    语句组
}
while循环没有初始化语句,循环次数是不可知的,只要循环条件满足,循环就会一直进行下去。

2.2 do-while语句
do-while语句的使用与while语句相似,不过do-while语句是事后判断循环条件结构,语句格式如下:
do {
    语句组
} while (循环条件)
do-while循环没有初始化语句,循环次数是不可知的,不管循环条件是否满足,都会先执行一次循环体,然后再判断循环条件。如果条件满足则执行循环体,不满足则停止循环。

2.3 for语句
for语句是应用最广泛、功能最强的一种循环语句。一般格式如下:
for (初始化; 循环条件; 迭代) {
    语句组
}
for语句首先会先执行初始化语句,它的作用是初始化循环变量和其他变量,然后程序会判断循环条件是否满足,如果满足,则继续执行循环体并计算迭代语句,之后再判断循环条件,如此反复,直到判断循环条件不满足时跳出循环。
注意:初始化、循环条件以及迭代部分都可以为空语句(但分号不能省略),三者均为空的时候,相当于一个无限循环。另外,在初始化部分和迭代部分,可以使用逗号语句来进行多个操作。

2.4 for-each语句
Java 5之后提供了一种专门用于遍历集合的for循环——for-each循环。使用for-each循环不必按照for的标准套路编写代码,只需要提供一个集合就可以遍历。
假设有一个数组,采用for语句遍历数组的方式如下:

// 声明并初始化int数组
 int[] numbers = { 43, 32, 53, 54, 75, 7, 10 };System.out.println("----for-------");
 // for语句
 for (int i = 0; i < numbers.length; i++) {
     System.out.println("Count is:" + numbers[i]);
 }
 那么采用for-each循环语句遍历数组的方式如下:
 // 声明并初始化int数组
 int[] numbers = { 43, 32, 53, 54, 75, 7, 10 };System.out.println("----for each----");
 // for-each语句
 for (int item : numbers) {
     System.out.println("Count is:" + item);
 }

3.跳转语句
跳转语句能够改变程序的执行顺序,可以实现程序的跳转。Java有4种跳转语句:break、continue、throw和return。

3.1 break语句
break语句可用于while、repeat-while和for循环结构,它的作用是强行退出循环体,不再执行循环体中剩余的语句。

在循环体中使用break语句有两种方式:带有标签和不带标签。语法格式如下:
break;           //不带标签
break label;     //带标签,label是标签名
不带标签的break语句使程序跳出所在层的循环体,而带标签的break语句使程序跳出标签指示的循环体。
示例代码如下:

label1: for (int x = 0; x < 5; x++) {          
     for (int y = 5; y > 0; y--) {              
         if (y == x) {
             //跳转到label1指向的循环
             break label1;                      
         }
         System.out.printf("(x,y) = (%d,%d)", x, y);
         // 打印一个换行符,实现换行
         System.out.println();
     }
 }
 System.out.println("Game Over!");

3.2 continue语句
continue语句用来结束本次循环,跳过循环体中尚未执行的语句,接着进行终止条件的判断,以决定是否继续循环。对于for语句,在进行终止条件的判断前,还要先执行迭代语句。

在循环体中使用continue语句有两种方式可以带有标签,也可以不带标签。语法格式如下:
continue          //不带标签
continue label    //带标签,label是标签名

3.3 throw语句(TODO)
throw语句用于抛出异常,后面笔记再写。

3.4 return语句(TODO)
return语句用于返回值,后面笔记再写。