今天来聊聊Java的分支选择,枯燥的内容过去了,现在开始变的有趣了。
流程控制:代码的执行的顺序,策略。
有3种:
1:顺序 从上到下依次执行。
2:分支选择 根据条件有选择的执行某些代码
3:循环 反复执行某些代码。
分支选择
if:
if 语句:如果。。
根据条件选择是否执行某些代码。
语法:
if(条件){
//任意的java代码 if 代码块
}
…
诠释的是:如果怎么样,,我就怎么样。。。
解释:
条件:必须是一个boolean 表达式。只要最终返回一个true or false 即可。
执行过程:
1:如果布尔表达式返回true,条件成立,那么执行 if 代码块。
2:如果布尔表达式返回false,条件不成立,那么跳过 if 后面的代码块,执行代码块后面 的java 代码。
注意:
如果if代码块 中的代码,只有一条java 语句(只有一个分号),那么大括号可以不要。 if 控制的就是选择是否执行这一条语句。
if{}else{}:
if-else 流程控制。
语法:
if(条件){
//if 代码块
}else{
//else 代码块
}
解释: 必须是一个boolean 表达式。只要最终返回一个true or false 即可。
诠释意思:如果条件成立,那么就XXXX,否则 就 *****。
执行过程:
如果条件成立,boolean表达式返回值为 true,那么执行 if 代码块中的内容,不执行else 代码块中的内容。
如果条件为 false,那么跳过if 代码块内容,执行 else 中的内容。
if 代码块 和 else 代码块 只能执行其一。
注意:
1:if 代码块 和 else 代码块 如果内容只有一句java代码,那么大括号可以省略。但是还是建议 把这对大括号添加上。
2: else 不能单独存在的,必须和 if 配对才行。
if{}else if{}else{}:
if-else if -else
多分支选择:
语法:
if(条件-1){
//if 代码块
}else if(条件-2){
//if 代码块
}else if(条件-3){
//if 代码块
}else if(条件-4){
//if 代码块
}
…else if 数量不限,最少有一个。
else{
//
}
…
执行过程:
1:如果 条件-1 成立,那么执行 第一个if 代码块中的内容,然后跳过后面所有的分支,执行后续的内容。
2:如果 条件-1 不成立,跳过第一个if 代码块。然后 判断 条件-2 ,条件-2 成立,执行后面的if 代码块,不成立,再次判断下一个条件,以此类推。
3:到最后,如果所有的条件都不成立,执行else 中的内容。
注意:
1:最后的else 可以没有。如果有最后的else 那么该多分支选择语句,肯定会执行且仅执行某一条分支。
2:如果最后的else 没有,那么可能一个分支都不执行,是否执行某个分支,取决于该分支对应的条件是否成立。
3:每一个else 都要有一个和它对应的if 存在。else 的数量小于等于 if 的数量。
4:每一个分支代码,如果只有一条语句,都可以省略大括号,不建议省略。
使用的环境:多个分支,条件互斥就可以。
if else if else 可以嵌套使用,不建议嵌套太深。一般不要超过三层。
switch:
多分支选择语句 switch :开关
基本语法:
switch(表达式){
case 常量表达式-1:
//java代码
break;
case 常量表达式-2:
//java代码
break;
case 常量表达式-3:
//java代码
break;
…此处省略若干个分支case
default:
//java代码
break;
}
解释:
1:switch 后的表达式 :必须是变量,或者是变量表达式。 表达式的类型:byte,short int char enum(jdk1.5) String(jdk1.7).
2:case 是一个关键字 后面只能跟常量或者是常量表达式。常量的类型必须和 switch后的表达式的类型兼容。
3:每个case 后的常量后跟一个 冒号。
4:default后也跟一个冒号。
执行的过程:
1:计算switch 后的小括号内的表达式的返回值。
2:然后依次和 case 后的内容比较 是否相等,如果相等,则执行case 后面的代码,如果不相等,继续和下一个case 后的值做比较。
3:如果和某一个case 后面的值相等了,则执行case后的java 代码,直到遇到一个break语句,或者到达switch的末尾,switch结束。
4:如果switch 后的表达式的值和所有的case 后的内容都不相等。则执行 defalt后面的java 代码。遇到一个break语句,或者到达switch的末尾,switch结束。
注意:
1:所有的case 后的常量表达式的返回值都不能相同。
2:每一个case 后的break 语句,都是可选的。如果被匹配成功的case 后没有break。那么执行完当前的case 之后,会继续执行后续的所有的java 代码,包括case 和 defalt,直到遇到了某一个break,结束switch 语句。
3:defalut:是可选的,不是必须存在的。
如何选择合适的分支呢?
两者区别:
switch 只能用于等值比较判断。
if -else if --else 既可以用在等值比较上,还可以用于非等值比较判断。所以 switch 能实现的功能 使用 多分支 if else if 都可以实现。反之则不行。
等值比较的选择:
switch 的结构更清晰一些。如果分支比较多,可以考虑使用switch。