1. 顺序结构
- 特点:从上到下依次执行 ,中间没有任何判断和跳转
2. 分支语句
2.1 if-else 条件判断结构
-
结构一: 单分支条件判断 :if
-
格式:
if(条件表达式) { 语句块; }
-
说明:条件表达式必须是布尔表达式(关系表达式或逻辑表达式)或布尔变量
-
-
结构二:双分支条件判断: if-else
-
格式
if(条件表达式) { 语句块1; }else { 语句块2; }
-
-
格式三: 多分支条件判断: if...else if....else
-
格式
if (条件表达式1) { 语句块1; } else if (条件表达式2) { 语句块2; } ... }else if (条件表达式n) { 语句块n; } else { 语句块n+1; }
-
说明:一旦表达式为true , 则进入执行相应的语句块,执行完成对应的语句块之后 ,就跳出当前结构
-
注意:
- 当条件表达式之间是“
互斥
”关系时(即彼此没有交集),条件判断语句及执行语句间顺序无所谓。 - 当条件表达式之间是“
包含
”关系时,“小上大下 / 子上父下
”,否则范围小的条件表达式将不可能被执行。
- 当条件表达式之间是“
-
2.2 if...else 嵌套
-
执行的特点
- 如果是嵌套在if语句块中的,只有当外部的if条件满足,才会去判断内部的条件
- 如果是嵌套在else语句块中的,只有当外部的if条件不满足,进入else后,才会去判断内部的条件
其他说明:
- 语句块只有一条执行语句时,一对
{}可以省略
,但建议保留 - 当 if-else 结构是 “多选一”时 ,最后 else是可选的 , 根据需要可以省略
2.3 switch-case 选择结构
-
基本语法
-
语法格式:
switch(表达式){ case 常量值1: 语句块1; //break; case 常量值2: 语句块2; //break; // ... [default: 语句块n+1; break; ] }
-
使用注意点:
- switch(表达式)中表达式的值必须是下述几种类型之一:byte,short,char,int,枚举 (jdk 5.0),String (jdk 7.0);
- case子句中的值必须是常量,不能是变量名或不确定的表达式值或范围;
- 同一个switch语句,所有case子句中的常量值互不相同;
- break语句用来在执行完一个case分支后使程序跳出switch语句块;
如果没有break,程序会顺序执行到switch结尾; - default子句是可选的。同时,位置也是灵活的。当没有匹配的case时,执行default语句。
-
-
利用case的穿透性:
- 在switch语句中,如果case的后面不写break,将出现穿透现象,也就是一旦匹配成功,不会在判断下一个case的值,直接向后运行,直到遇到break或者整个switch语句结束,执行终止。
2.4 if-else 语句与switch-case语句比较
-
结论:凡是使用switch-case的结构都可以转换为if-else结构。反之,不成立。
-
开发经验:如果既可以使用switch-case,又可以使用if-else,建议使用switch-case。因为效率稍高。
-
细节对比:
-
if-else语句优势
- if语句的条件是一个布尔类型值,if条件表达式为true则进入分支,可以用于范围的判断,也可以用于等值的判断,
使用范围更广
。 - switch语句的条件是一个常量值(byte,short,int,char,枚举,String),只能判断某个变量或表达式的结果是否等于某个常量值,
使用场景较狭窄
。
- if语句的条件是一个布尔类型值,if条件表达式为true则进入分支,可以用于范围的判断,也可以用于等值的判断,
-
switch语句优势
- 当条件是判断某个变量或表达式是否等于某个固定的常量值时,使用if和switch都可以,习惯上使用switch更多。因为
效率稍高
。当条件是区间范围的判断时,只能使用if语句。 - 使用switch可以利用
穿透性
,同时执行多个分支,而if...else没有穿透性。
- 当条件是判断某个变量或表达式是否等于某个固定的常量值时,使用if和switch都可以,习惯上使用switch更多。因为
-
3. 循环语句
-
理解:循环语句具有在某些条件下满足的情况下 ,反复执行特定代码的功能
-
循环结构分类:
- for循环
- while循环
- do-while循环
-
循环结构四要素
- 初始部分
- 循环条件部分
- 循环体部分
- 迭代部分
3.1 for循环
-
基本语法:
-
语法格式
for (①初始化部分; ②循环条件部分; ④迭代部分){ ③循环体部分; }
-
执行过程: ①-②-③-④-②-③-④-②-③-④-.....-②
-
图示
-
说明:
- for(;;)中的两个;不能多也不能少
- ①初始化部分可以声明多个变量,但必须是同一个类型,用逗号分隔
- ②循环条件部分为boolean类型表达式,当值为false时,退出循环
- ④可以有多个变量更新,用逗号分隔
3.2 while 循环
-
基本语法
-
语法格式
①初始化部分 while(②循环条件部分){ ③循环体部分; ④迭代部分; }
-
执行过程: ①-②-③-④-②-③-④-②-③-④-...-②
-
图示:
-
说明:
- while(循环条件)中循环条件必须是boolean类型。
- 注意不要忘记声明④迭代部分。否则,循环将不能结束,变成死循环。
- for循环和while循环可以相互转换。二者没有性能上的差别。实际开发中,根据具体结构的情况,选择哪个格式更合适、美观。
- for循环与while循环的区别:初始化条件部分的作用域不同。
-
3.3 do-while 循环
-
基本语法
-
语法格式
①初始化部分; do{ ③循环体部分 ④迭代部分 }while(②循环条件部分);
-
执行过程:①-③-④-②-③-④-②-③-④-...-②
-
图示:
-
说明:
- 结尾while(循环条件)中循环条件必须是boolean类型
- do{}while();最后有一个分号
- do-while结构的循环体语句是至少会执行一次,这个和for和while是不一样的
- 循环的三个结构for、while、do-while三者是可以相互转换的。
-
3.4 对比三种循环结构
-
三种循环结构都具有四个要素:
- 循环变量的初始化条件
- 循环条件
- 循环体语句块
- 循环变量的修改的迭代表达式
-
从循环次数角度分析
- do-while循环至少执行一次循环体语句。
- for和while循环先判断循环条件语句是否成立,然后决定是否执行循环体。
-
如何选择
- 遍历有明显的循环次数(范围)的需求,选择for循环
- 遍历没有明显的循环次数(范围)的需求,选择while循环
- 如果循环体语句块至少执行一次,可以考虑使用do-while循环
- 本质上:三种循环之间完全可以互相转换,都能实现循环的功能