四、控制执行流程
Java的控制语句设计的关键字有if-else while do-while for return break和switch。
Java虽然保留goto关键字,但不支持goto语句。
1.true和false
所有条件语句都利用条件表达式的真或假来决定执行路径。
Java不允许使用数字作为布尔值使用。
如果想在布尔测试中使用一个非布尔值,如if(a),那么首先必须使用一个条件表达式将其转换成布尔值,如if(a!=0)。
2.if-else语句
else是可选的。
格式:
if(Boolean-expression)
statement
或
if(Boolean-expression) //Boolean-expression为真,执行statement1,否则执行statement2
statement1
else
statement2
//当然也可以嵌套
if(Boolean-expression1)
statement1
else if(Boolean-expression2)
statement2
else
statement3
注意,上面的Boolean-expression必须产生一个布尔结果。
3.迭代
1)while
while(Boolean-expression) //Boolean-expression为真,执行statement
statement
2)do-while
do
statement
while(Boolean-expression) //Boolean-expression为真,执行statement
与while唯一区别在于do-while中的语句至少会执行一次。
3)for
for(initialization; Boolean-expression; step)
statement
for语句中,先执行initialization语句,然后判断Boolean-expression结果是否为true,为真则执行statement,接下来会执行step,再次对Boolean-expression结果进行判断,如此循环,直到Boolean-expression结果为false。
for中的initialization和step可以是逗号表达式,这也是Java唯一用到逗号操作符的地方。此外,在initialization部分可以对多个同类型的变量进行定义。
4.foreach语法
foreach可以让我们在不必创建int变量来对访问项构成的序列进行计数,它可以自动产生这一项。如下例:
import java.util.*
public class ForEachFloat{
public static void main(String[] args){
Random rand = new Random(47);
float f[] = new float[10];
for(int i = 0; i < 10; i++)
f[i] = rand.nextFloat();
for(float x:f)
System.out.println(x);
}
}
结果如下,for(float x:f)定义了一个float类型的变量x,并将数组f的每个元素一次赋给x。
任何返回一个数组的方法都可以使用foreach。
5.return
return关键词有两个作用:
a.指定一个方法返回什么值;
b.导致当前方法退出,并返回那个值。
6.break和continue
break:强制退出循环,不执行循环中剩余的语句。
continue:停止执行当前的迭代,然后退回循环其实处,开始下一次循环。
7.类似goto
Java没有goto,但具有类似goto的功能,因为都使用“标签”机制。
标签格式为 label:
Java中,标签起作用的唯一地方刚好是迭代语句之前。而在迭代之前设置标签的唯一理由是我们希望在其中嵌套另一个迭代或一个开关。
break和continue关键词通常只中断当前循环,但和标签一起使用,会中断循环,跳转到标签所在位置。
我们举例说明break-label和continue-label的区别,为了说明问题,我故意写了一个死循环。如下:
上图程序的输出说明带标签的continue会跳转到标签的位置,并重新进入紧接着标签后的循环。
从输出的i值也可以看出,i会再次从0开始,说明重新进入了for循环。
下图是break-label的表现:
程序的输出说明带标签的break会中断并跳出标签所指的循环。
8.switch
根据整数表达式的值,switch语句可以从一系列代码中选出一段去执行,属于多路选择。
格式:
switch(integral-selector){
case integral-vallue1: statement; break;
case integral-vallue2: statement; break;
case integral-vallue3: statement; break;
//...
default:statement;
}
switch会执行case后的integral-value与integral-selector相等的statement。
default在所有integral-value与integral-selector都不等的情况下执行。
integral-selector必须为int或char类型类似的整数值,如果为字符串或者浮点数则switch不工作。