第3章程序控制语句
程序语句一般是从上到下顺序执行,通过控制语句可以改变语句的执行顺序。Java程序控制语句分为三类: 选择、循环和跳转。根据表达式结果或变量状态,选择语句使程序选择不同的执行路径; 循环语句使程序能够重复执行多个语句; 跳转语句允许程序以非线性的方式执行,跳出原有的执行路径。
3.1选 择 语 句
Java支持两种选择语句: if语句和switch语句。这些语句在程序运行时可以根据条件变量的状态控制程序的执行过程。分支比较少的情况下可使用if语句,分支比较多的情况下使用switch语句比较合适。
1. if语句
1) 一般if��句
if语句是Java中的条件分支语句,它能将程序的执行路径分为两条。if语句的完整格式如下:
if (condition)
statement1;
else
statement2;
其中,if或else控制的对象可以是单个语句,也可以是程序块。条件condition可以是任何返回布尔值的表达式,else子句不是必需的。
if语句的执行过程是: 如果条件为真(true),就执行if的对象(statement1); 否则,执行else的对象(statement2)。任何时候两条语句都不可能同时执行。通常,用于控制if语句的表达式都是一个布尔表达式。
2) 嵌套if语句
嵌套if语句是指该if语句为另一个if或else语句的对象。在编程时经常要用到嵌套if语句。使用嵌套if语句时,一个else语句总是对应着和它在同一个块中的*近的if语句,而且该if语句没有与其他else语句相关联。
另外一种嵌套形式是ifelseif阶梯,它的语法如下:
if(condition1)
statement1;
else if(condition2)
statement2;
else if(condition3)
statement3;
...
else
statementN;
条件表达式从上到下被求值。一旦找到为真的条件,就执行与它关联的语句,其他部分就被忽略了。如果所有的条件都不为真,则执行*后的else语句。*后的else语句经常被作为默认的条件。如果没有*后的else语句,而且所有其他的条件都失败,程序就不会做任何动作。
【例31】ifelse语句使用。
// IfElseTest.java
import java.util.Random;
public class IfElseTest {
public static void main(String[] args) {
// 随机产生一个字符
Random r=new Random();
char c=(char) r.nextInt('z');
// 判断字符的类型
if (c < 32)
System.out.println("是一个控制符:"+c);
else if (c >='0' && c <='9')
System.out.println("是一个数字:"+c);
else if (c >='A' && c <='Z')
System.out.println("是一个大写字符:"+c);
else if (c >='a' && c <='z')
System.out.println("是一个小写字符:"+c);
else
System.out.println("其他字符:"+c);
}
}
Random类专门用于产生伪随机数,其方法nextInt(int bound)返回一个小于bound的随机整数。本程序返回一个小于字符'z'的随机整数,并转换为字符。后面的ifelse语句判断该字符是什么类型。
2. switch语句
switch语句是Java的多路分支语句。基于一个表达式的值,使程序执行不同分支的case语句。switch语句的通用形式如下:
switch (expression) {
case value1:
... // statement block
break;
case value2:
... // statement block
break;
case valueN:
... // statement block
break;
default:
... // default statement block
}
表达式expression的类型可以为byte、short、int、char、String或枚举(enum)类型,每个case语句后的值value必须是与表达式类型兼容的一个常量。重复的case值是不允许的。
switch语句的执行过程如下: 表达式的值首先与每个case语句中的常量相比较。如果发现了一个与之相匹配的,则执行该case语句后的代码。如果没有一个case常量与表达式的值相匹配,则执行default语句。当然,default语句是可选的。如果没有相匹配的case语句,也没有default语句,则什么也不执行。
case语句只是起到一个标号作用,用来查找匹配的入口并从此处开始执行其后的语句序列,对后面的case子句不再进行匹配。
switch语句的执行过程和default语句的位置没有关系,不会因为把default语句放在switch的开始而执行default语句。
case语句序列中的break语句使程序流从整个switch语句退出。当遇到一个break语句时,程序将跳出switch语句,从整个switch语句后的**行代码开始继续执行。如果没有遇到break语句,switch语句将一直执行到其结束。
……