第四讲:流程控制
Java为我们提供了多种流程控制语句,在使用时,我们可以视实际情况而定。
if…else语句
if…else语句一般用于简单、少量的条件判断时,根据判断结果选则要执行的分支。
语法:
if (expression) {
// 语句
if (expression) {
// 语句
} else if (expression) {
// 语句
} else {
// 语句
}
} else {
// 语句
}
示例:
public class Demo {
public static void main(String[] args) {
int a = 10;
int b = 20;
if (a > b) { // 1.先执行if判断,如果满足条件,执行分支
System.out.println("a > b");
} else if (a == b) { // 2.if条件不满足,执行else if 判断,如果满足条件,执行分支
System.out.println("a = b");
} else { // 3.else if条件不满足,执行else分支
System.out.println("a < b");
}
}
}
输出:
a < b
if…else语句是一种按顺序执行的语句,简单来说它就是从上到下依次判断条件,只要某个条件判断后为true就执行其内部代码,后面的判断条件不再执行;只有所有的if和else if都不满足条件时,最后才会执行else。
注意:else不需要判断条件,它的条件默认是上面所有if和if else都不满足条件的部分。
switch语句
switch语句类似与if…else语句,但是代码更加简洁,可读性更好。
语法:
switch (variable/expression) {
case value1:
// 语句
break;
case value2:
// 语句
break;
default:
// 语句
}
示例:
public class Demo {
public static void main(String[] args) {
int a = 10;
switch (a) {
case 10:
System.out.println("a=" + a);
break;
case 20:
System.out.println("a=" + a);
break;
default:
System.out.println("a=" + a);
}
}
}
输出:
a=10
switch的判断条件可以是表达式或变量,然后将其与每个case标签的值或表达式进行比较,当某个case满足条件时,执行内部语句,执行后会通过break跳出整个switch,后面代码不会再执行;只有所有的case都不满足条件时,才会执行默认的default。
注意:case中的语句执行完成后,一定要有break用于跳出整个switch,否则后面的程序依然会执行。
示例:
public class Demo {
public static void main(String[] args) {
int a = 10;
switch (a) {
case 10: // 条件满足
System.out.println("1. a=" + a); // 输出后没有执行break
case 20: // 因为在上一个case执行时,条件已经判断为true,这里不会再次判断,而是会直接执行语句
System.out.println("2. a=" + a); // 输出后没有执行break
default: // 不再判断条件
System.out.println("3. a=" + a); // 执行语句
}
}
}
输出:
1. a=10
2. a=10
3. a=10
示例:
public class Demo {
public static void main(String[] args) {
int a = 10;
switch (a) {
case 20: // 执行case时条件不满足
System.out.println("1. a=" + a); // 语句不执行
case 10: // 条件满足
System.out.println("2. a=" + a); // 执行语句,且未执行break跳出
default: // 不再判断条件
System.out.println("3. a=" + a); // 执行语句
}
}
}
输出:
2. a=10
3. a=10
for循环
在Java中for循环是一种最常用的循环语句,它可以通过循环条件控制代码块的重复执行;只要满足条件就执行代码块,不满足直接跳出。
语法:
for (init; expression; update) {
// 语句
}
示例:
public class Demo {
public static void main(String[] args) {
for (int i = 0; i < 2; i++) {
System.out.println(i); // 循环输出2次i的值
}
System.out.println("end");
}
}
输出:
0
1
end
示例中for循环的执行流程:
- 初始化变量,如int i = 0
- 执行条件判断,如i < 2(此时i为0,也就是0 < 2)// 满足条件
- 满足条件执行循环体,如System.out.println(i); // 输出0
- 执行完循环体后,修改变量,如i++
- 执行条件判断,如i < 2(此时i为1,也就是1 < 2)// 满足条件
- 满足条件执行循环体,如System.out.println(i); // 输出1
- 执行完循环体后,修改变量,如i++
- 执行条件判断,如i < 2(此时i为2,也就是2 < 2)// 不满足条件
- 不满足条件,跳出循环体
通过上面对for循环的流程介绍可以发现,初始化变量只会执行一次;然后进行条件判断,条件符合执行循环体,否则直接跳出循环;在每次执行完循环体后都会执行一次变量的更新,更新后的变量会再次进行条件判断。
扩展1:for循环中的init,expression,update可以根据实际情况进行添加,可以省略一个、两个、三个都可以,省略expression时就是一个死循环,实际开发过程中要注意。
示例:
public class Demo {
public static void main(String[] args) {
int i = 0;
for ( ; i < 2; i++) {
System.out.println(i);
}
System.out.println("===");
for ( ; ; ) {
System.out.println(i);
}
}
}
输出:
0
1
===
2
2
2
... // 一直循环输出2
扩展2:for-each循环,一种特殊的for循环,他没有init、expression、update,它的作用就是循环遍历,将一个集合或数组中的值按顺序依次输出。
语法:
for (value : 数组/集合) {
// 语句
}
示例:
public class Demo {
public static void main(String[] args) {
String[] strings = {"a", "b", "c"}; // 字符串类型数组,后面会介绍
for (String string : strings) {
System.out.println(string);
}
}
}
输出:
a
b
c
while循环
Java中的while循环是一种只有判断条件或表达式的循环,只要满足条件,即可执行循环体;可以在循环体内部改变循环条件,如果不改变循环条件,那这就是一个死循环。
语法:
while (expression) {
// 语句
}
示例:
public class Demo {
public static void main(String[] args) {
int i = 0;
while (i < 2) {
System.out.println(i);
i++;
}
}
}
输出:
0
1
while循环的流程:
- 先判断条件,如i < 2
- 条件满足,执行循环体;条件不满足,跳出循环
- 循环体内部改变条件
- 再次判断条件
扩展:do-while循环。这是一种先执行语句,再判断条件的循环,如果条件满足再次执行语句,条件不满足则结束循环;使用这种循环可以保证循环中的语句一定会至少执行一次。
语法:
do {
// 语句
} while (expression);
示例:
public class Demo {
public static void main(String[] args) {
int i = 0;
do {
System.out.println(i);
i++;
} while (i < 1);
System.out.println("end");
}
}
输出:
0
end