Java提供了两种常见的分支控制结构,if语句和switch语句。
其中if语句使用boolean表达式或boolean值作为分支条件来进行分支控制,
而switch语句则用于对多个整形值进行匹配,从而实现分支控制。
if条件语句
if语句使用boolean表达式或boolean值作为分支条件来进行分支控制。具体有如下3种形式:
1),if(){}
2),if(){}else{}
3),if(){}else if(){}else{}
如果if,else if,else后的代码块只有一行语句时,则可以省略花括号,因为单行语句本身就是一个整体,无须用花括号来把他们定义成一个整体。
注意:if,else,else if后的条件执行体要么是一个花括号括起来的代码块,则这个代码块整体作为条件执行体,要么是以分号为结束符的一行语句,甚至可能是一个空语句。
空语句就是一个分号,那么就只是这条语句作为条件执行体。如果省略了if条件后条件执行体的花括号,那么if条件只控制到紧跟该条件语句的第一个分号处。
使用if语句个人建议:
1),就我个人编码风格来说,我不建议省略花括号,即使执行体只有一条语句。
2),使用if...else语句时,一定要先处理包含范围更小的情况,一定要先处理经常会发生的分支。
对于任何的if else语句,表面上看起来,else后没有任何条件,这是错误的想法,else的含义是“否则”,else本身就是一个条件。else的隐含条件就是对前面条件取反。
public static void main(String[] args) { // 下面的代码控制台永远输出-->这个分支屏蔽了下面所有的分支了呢 int age = 50; if (age > 10) { System.out.println("这个分支屏蔽了下面所有的分支了呢"); } else if (age > 30) { System.out.println("这个分支永远不会被执行,永远永远"); } }
switch分支语句
switch语句由一个控制表达式和多个case标签组成,和if语句不同的是,switch语句后面的控制表达式的数据类型只能是byte,short,char,int四种整数类型,枚举类型和
Java.lang.String类型,不能是boolean类型。
switch语句后面的控制表达式支持字符串类型,是从Java7开始的,建议使用Java8,Java8是Java在5之后的另外一个里程碑版本。
switch语句往往需要在case标签后紧跟一个代码块,case标签作为这个代码块的标识。switch语句的语法格式如下:
switch(expression) { case condition1: { statement(s1) break; } case condition2: { statement(s2) break; } ... case conditionN: { statement(sN) break; } default: { statement(s) } }
switch语句中最后的default,意思就是表达式的值和前面所有的case中表达式的值都不相同。举个例子:
public static void main(String[] args) { String season = "夏天"; switch (season) { case "春天": { System.out.println("这里是春天吆"); break; } case "夏天": { System.out.println("这里是夏天吆"); break; } default: { System.out.println("只能是秋天或者冬天啦"); } } }
使用switch语句时,有两个值得注意的地方:
1),switch语句后的表达式的数据类型只能是byte,short,int,char4种整数类型,String和枚举类型
2),如果省略了case后代码块的break,将引入一个陷阱。因为这个限制,我平时很少使用switch语句,建议大家也最好别多使用,用if+else足够
public static void main(String[] args) { // 下面的代码演示,代码执行块中少了break的编码陷阱。 // 第一个case之后所有的分支都会被执行,不建议多使用switch语句 String season = "LinkinPark"; switch (season) { case "NightWish": { System.out.println("这里的语句不会被执行"); } case "LinkinPark": { System.out.println("这里的语句会被执行"); } default: { System.out.println("这里的语句也会被执行"); } } }