控制执行流程
[TOC]
控制执行流程
true和false
所有条件语句都利用条件表达式的真或假来决定执行路径。
if-else
if-else语句是控制程序流程的最基本形式。其中的else是可选的。
if (Boolean-expression)
Statement
// or
if (Boolean-expression)
Statement
else
Statement
// or
if (Boolean-expression)
Statement
else if (Boolean-expression)
Statement
else
Statement
布尔表达式必须产生一个布尔结果,statement指用分号结尾的简单语句,或复合语句。
迭代
while、do-while、for用来控制循环,有时将它们划分为迭代语句。语句会重复执行,知道起控制作用的布尔表达式得到“假“的结果为止。
while
while(Boolean-expression)
Statement
do-while
do
statement
while(Boolean-expression)
do-while中的语句至少会执行一次。
for
for (initialization; Boolean-expression; step)
statement
逗号操作符
逗号操作符和逗号分隔符是不同的,逗号分隔符用来分隔函数的不同参数。Java里唯一用到逗号操作符的地方就是for循环的控制表达式。在控制表达式的初始化和步进控制部分,可以使用一系列由逗号分隔的语句,而且那些语句均会被独立执行。
通过逗号操作符,可以在for语句内定义多个变量,但是它们必须具有相同的类型。
public class CommaOperator {
public static void main(String args[]) {
for (int i = 1, j = i + 10; i < 5; i++, j = i*2) {
System.out.println("i = " + i + " j = " + j);
}
}
} /** Output
i = 1 j = 11
i = 2 j = 4
i = 3 j = 6
i = 4 j = 8
*/
foreach语法
Java SE5引入了一种新的更加简洁的for语法用于数组和容器。
import java.util.*;
public class ForEachSample {
public static void main(String args[]) {
Random rand = new Random(47);
float f[] = new float[10];
for (int i=0; i < f.length; ++i) {
f[i] = rand.nextFloat();
}
for (float x : f) {
System.out.println(x);
}
for (char c : "Hello, World!".toCharArray()) {
System.out.print(c + " ");
}
}
} /**Output
0.72711575
0.39982635
0.5309454
0.0534122
0.16020656
0.57799757
0.18847865
0.4170137
0.51660204
0.73734957
H e l l o , W o r l d !
*/
foreach还可以用于任何Iterable对象。
return
Java中有多个关键字表示无条件分支,它们只是表示这个分支无需任何测试即可发生。这些关键词包括return、break、continue和一种与其他语言中的goto类似的跳转到标号语句的方式。
break和continue
在任何迭代语句的主体部分,都可用break和continue控制循环的流程。
默认情况下,break和continue控制最内层循环,可以使用标签来控制外层循环。
标签是后面跟有冒号的标识符,比如:lable1:
。
在Java中,标签起作用的唯一的地方刚好是在迭代语句之前。
public class LabelControl {
public static void main(String args[]) {
int i = 0;
outer:
for (; true; i++) {
inner:
for (; i < 10; i++) {
System.out.println("i = " + i);
if (i == 2) {
System.out.println("continue");
continue;
}
if (i == 3) {
System.out.println("break");
break;
}
if (i == 7) {
System.out.println("continue outer");
continue outer;
}
if (i == 8) {
System.out.println("break outer");
break outer;
}
for (int k=0; k < 5; ++k) {
if (k == 3) {
System.out.println("continue inner");
continue inner;
}
}
}
}
}
} /* Output
i = 0
continue inner
i = 1
continue inner
i = 2
continue
i = 3
break
i = 4
continue inner
i = 5
continue inner
i = 6
continue inner
i = 7
continue outer
i = 8
break outer
*/
规则:
一般的cotinue会退回最内层循环的开头,并继续执行
带标签的continue会到达标签的位置,并重新进入紧接在那个标签后面的循环
一般的break会中断并跳出当前循环
带标签的break会中断并跳出标签所指的循环
在Java里需要使用标签的唯一理由就是因为有循环嵌套存在,并且想从多层嵌套中break或continue。
switch
switch有时也被划分为一种选择语句。
import java.util.*;
public class SwitchExample {
public static void main(String[] args) {
Random rand = new Random(47);
for (int i=0; i < 100; ++i) {
int c = rand.nextInt(26) + 'a';
System.out.print((char)c + ", " + (int)c + ": ");
switch(c) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
System.out.println("vowel");
break;
case 'y':
case 'w':
System.out.println("Sometimes a vowel");
break;
default: System.out.println("consonant");
}
}
}
} /** Output
y, 121: Sometimes a vowel
n, 110: consonant
z, 122: consonant
b, 98: consonant
r, 114: consonant
n, 110: consonant
y, 121: Sometimes a vowel
g, 103: consonant
...
*/
若省略case后的break,则会继续执行后面的case语句,直到遇到一个break为止。
enum可以和switch协调工作。
case语句能够堆叠在一起,为一段代码形成多重匹配。
switch支持匹配的6中类型:
byte
short
char
int
enum(Java SE5)
String(Java SE7)
最后更新于
这有帮助吗?