程序的三种执行顺序
- 顺序结构:自上而下的执行程序
System.out.println("A");System.out.println("A");
- 分支结构:根据条件,选择对应的代码执行
if、switch
- 循环结构:控制某段代码重复的执行
for、while、do-while
分支结构
if
根据条件的真或假,来决定执行某段代码。
if分支有三种形式
- if
if (条件表达式) { 代码; }
- if … else
if (条件表达式) { 代码1; } else { 代码2; }
- if … else if … else
if (条件表达式1) { 代码1; } else if (条件表达式2) { 代码2; } else if (条件表达式3) { 代码3; } . . . else { 代码n; }
switch
是通过比较值是否相等,来决定执行哪条分支。
switch(表达式){
case 值1:
执行代码...;
break;
case 值2:
执行代码...;
break;
…
default:
执行代码n;
}
switch分支的执行流程
- 先执行表达式的值,再拿着这个值去与case后的值进行匹配。
- 与哪个case后的值匹配为true就执行哪个case块的代码,遇到break就跳出switch分支。
- 如果全部case后的值与之匹配都是false,则执行default块的代码。
switch的几点注意事项
- 表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String、不支持double、float、long。
- case给出的值不允许重复,且只能是字面量,不能是变量。
- 正常使用switch的时候,不要忘记写break,否则会出现穿透现象。
switch穿透性在些情况下可以简化代码
当存在多个case分支的代码相同时,可以把相同的代码放到一个case块中,其他的case块都通过穿透性穿透到该case块执行代码即可,这样可以简化代码。
public static void main(String[] args) {
test3();// 打游戏
}
public static void test3() {
String week = "周六";
switch (week) {
case "周一":
System.out.println("埋头苦干,解决bug");
break;
case "周二":
case "周三":
case "周四":
System.out.println("请求大牛程序员帮忙");
break;
case "周五":
System.out.println("自己整理代码");
break;
case "周六":
case "周日":
System.out.println("打游戏");
break;
default:
System.out.println("星期信息有误!");
}
}
if、switch的比较:各自适合什么业务场景?
- if在功能上远远强大于switch。
- 当前条件是区间的时候,建议使用if分支结构来实现
- 当条件是与一个一个的值比较的时候,建议用switch更合适(格式良好,性能较好,代码优雅)。
循环结构
for循环
控制一段代码反复执行很多次。
for (初始化语句; 循环条件; 迭代语句) {
循环体语句(重复执行的代码);
}
for (int i = 0; i < 3; i++) {
System.out.println("Hello World");
}
- 循环一开始,执行int i = 0 一次。
- 此时 i=0 ,接着计算机执行循环条件语句:0 < 3 返回true , 计算机就进到循环体中执行,输出 :helloWorld ,然后执行迭代语句i++。
- 此时 i=1 ,接着计算机执行循环条件语句:1 < 3 返回true , 计算机就进到循环体中执行,输出 :helloWorld ,然后执行迭代语句i++。
- 此时 i=2 ,接着计算机执行循环条件语句:2 < 3 返回true , 计算机就进到循环体中执行,输出 :helloWorld ,然后执行迭代语句i++。
- 此时 i=3 ,然后判断循环条件:3 < 3 返回false, 循环立即结束!!
while循环
初始化语句;
while (循环条件) {
循环体语句(被重复执行的代码);
迭代语句;
}
int i = 0;
while (i < 3) {
System.out.println("Hello World");
i++;
}
do-while
初始化语句;
do {
循环体语句;
迭代语句;
} while (循环条件);
int i = 0;
do {
System.out.println(“Hello World!");
i++;
} while( i < 3);
do-while循环的特点:先执行后判断。
- for循环 和 while循环(先判断后执行); do…while (先执行后判断)
- for循环和while循环的执行流程是一模一样的,功能上无区别,for能做的while也能做,反之亦然。
- 使用规范:如果已知循环次数建议使用for循环,如果不清楚要循环多少次建议使用while循环。
- 其他区别:for循环中,控制循环的变量只在循环中使用。while循环中,控制循环的变量在循环后还可以继续使用。
死循环
可以一直执行下去的一种循环,如果没有干预不会停下来。
死循环的写法
for ( ; ; ) {
System.out.println("Hello World1");
}
// 经典写法
while (true) {
System.out.println("Hello World2");
}
do {
System.out.println("Hello World3");
} while (true);
循环嵌套
循环中又包含循环。
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 5; j++) {
System.out.println("我爱你");
}
}
外部循环每循环一次,内部循环会全部执行完一轮。
break、continue
break : 跳出并结束当前所在循环的执行。
continue: 用于跳出当前循环的当次执行,直接进入循环的下一次执行。
注意事项
break : 只能用于结束所在循环, 或者结束所在switch分支的执行。
continue : 只能在循环中进行使用。