2. 流程控制
2.1 流程控制的定义
程序在执行时,遵循以下三种基础执行结构:
- 顺序结构
- 代码从上往下逐行执行,是程序执行最基本(默认)的结构。
- 分支结构
- 程序在运行到某节点时遇到多种分支,根据指定条件选择其中一种分支向下执行。
- 循环结构
- 某一段代码需重复执行,执行次数由循环条件控制。
可以通过指定语句修改程序结构,该操作称为流程控制,执行语句成为流程控制语句。
流程控制语句按照其修改结构,分为分支流程控制和循环流程控制。
2.2 分支流程控制
2.2.1 if-else
1.基础语法
if(condition){
//代码1
}
else{
//代码2
}
//允许没有else,但不允许只有else。
2.基础逻辑
1、condition: boolean类型的变量,或者是boolean结果的表达式。
2、如果condition为true,则code1执?,code2不执?。
3、如果condition为false,则code1不执?,code2执?。
4、if后?可以不写else,但是不能不写if,只写else。
3.语法进阶
在if和else后面的代码段中,若只有一句代码,则大括号可以省略。
2.2.2 switch-case
语法:
switch(variable){
case value1: ... ;
case value2: ... ;
case value3: ... ;
case value4: ... ;
...
default: ... ;
}
执行逻辑:
1、variable是⼀个变量,浮点型除外的类型。
2、捕获variable的值,如果variable的值和某⼀个case能够匹配上,则执⾏这个case后⾯的代码。
3、如果variable的值,和每⼀个case都不匹配,最后执⾏default中的语句。
注意:
- switch语句具有穿透性:若该变量值与某一value相同,则自该case起所有的代码段都会执行直至该switch结构结束或遇到关键字 break。
- default可以随意放置,但规范上放段末。
- variable不能说浮点类型。
穿透性有利有弊,自行取舍。
**if-else与switch-case使用场合:**条件是范围的用if-else,确切数值用switch-case。
2.3 循环控制流程
循环:某一段代码被重复执行多次。
循环的三要素:
1.循环的起点:
2.循环的条件:
3.循环的步长:
2.3.1 for
基础语法:
for(循环起点;循环条件;循环步长){
//循环体
}
快捷键:数组.fori、数组.forr(倒序);
2.执行逻辑:
1、执⾏循环起点代码
2、判断循环条件是否成⽴
3、当循环条件成⽴的时候,循环体执⾏,再执⾏循环步⻓,再判断条件是否成⽴
4、当循环条件不成⽴的时候,循环结束
3.语法进阶(增强for循环)
循环标签:
for (循环变量类型 循环变量名称 : 要被遍历的对象) {
循环体
break 循环标签;
}
快捷键:数组.for、foeeach;
4.注意事项:
-
for循环的循环体中的代码若只有一行,则大括号可省略,但规范上不能省。
-
for循环小括号中的每一个部分都可省略。其中循环条件不写则默认值true,即循环条件永远成立。但规范上不能省,例:
int i=0; for ( ; ; ){ if(i>100){ break; } System.out.println(i); i+=2; }
5.for循环与增强for循环的比较:
1.如果在遍历过程中需要修改元素或者获取下标,使用下标遍历。
2.如果仅仅需要用到各元素的值,使用增强for循环(效率比下标遍历高)。
2.3.2 while
和for循环的执行逻辑基本一致,根据condition的布尔值判断循环是否结束。
1.基础语法:
while(condition){
//循环体
}
2.3.3 do-while
do{
//循环体
}while(condition)
先执行一次再判断循环条件,基本不用
2.3.4 break,continue
循环中的break:
代表无论循环条件是否成立,均跳出循环。
continue:
代表停止本次循环,继续下次循环。
2.3.5 for循环和while循环的比较
1、当循环次数是可预期的时候,使用for循环。
2、当循环次数是不可预期的,但是知道循环的条件,使用while循环。
2.3.6 循环标签
可以在循环之前自定义循环标签,适当时刻可以停止循环。
OUTER:
for(;;){
//循环体
break(或者continue) OUTER;
}