在 Java 中,提供了 if-else 和 switch 语句来对分支结构的支持。
if-else 语句是使用最多的分支语句,它适合单路分支、双路分支和多路分支。if-else 语句有三种形式,分别实现单路、双路和多路分支。分别如下:
if 语句的语法如下:
if(<表达式>) { <语句> }
其中,<表达式> 的计算结果必须为 boolean 类型,<语句> 可以是单条语句或使用花括号括起来的语句块。当<表达式>为 true 时,才执行<语句>,否则,不执行<语句>。
示例:
public class Demo { public static void main(String[] args) { int a = 30; // 不推荐,可读性差 if(a > 20) System.out.println("a > 20"); // 不推荐,可读性差 if(a > 20) System.out.println("a > 20"); // 推荐 if(a > 20) { System.out.println("a > 20"); } } }
运行示例,输出结果如下:
a > 20 a > 20 a > 20
if-else 语句的语法如下:
if(<表达式>) <语句1> else <语句2>
其中,<表达式> 的计算结果必须为 boolean 类型,<语句1>和<语句2> 可以是单条语句或使用花括号括起来的语句块。如果<表达式>为true,则执行<语句1>。如果<表达式>为false,则执行<语句2>。
示例:
public class Demo { public static void main(String[] args) { int a = 30; // 不推荐,可读性差 if(a > 20) System.out.println("a > 20"); else System.out.println("a <= 20"); // 推荐 if(a > 20) { System.out.println("a > 20"); } else { System.out.println("a <= 20"); } } }
运行示例,输出结果如下:
a > 20 a > 20
if-else 语句的语法如下:
if(<表达式1>) <语句1> else if(<表达式2>) <语句2> ... else if(<表达式n>) <语句n> else <语句n+1>
其中,<表达式1>、<表达式2>、<表达式n> 的计算结果必须为 boolean 类型,<语句1>、<语句2>、<语句n>和<语句n+1> 可以是单条语句或使用花括号括起来的语句块。
如果<表达式1>为 true,则执行<语句1>。
如果<表达式1>为 false,<表达式2>为 true,则执行 <语句2>。
如果<表达式1>、<表达式2>为 false,<表达式n>为true,则执行<语句n>。
如果上面所有表达式均为 false,则执行<语句n+1>。
示例:
public class Demo { public static void main(String[] args) { int score = 78; if(score > 90) { System.out.println("优 秀"); } else if(score > 80) { System.out.println("良 好"); } else if(score > 60) { System.out.println("及 格"); } else { System.out.println("不及格"); } } }
运行示例,输出结果如下:
及 格
if 语句可以嵌套使用,即在 if 语句分支中又包含一个或多个if语句。语法格式:
if(<表达式1>) if(<表达式2>) <语句1> else <语句2> else <语句3>
其中,<表达式1>、<表达式2> 的计算结果必须是布尔值。<语句1>、<语句2>、<语句3> 可以是单条语句也可以是花括号括起来的语句块。如果 <表达式1> 为 true,则执行 if 语句内部的 if 语句,否则执行 <语句3>。
示例:
public class Demo { public static void main(String[] args) { int score = 78; if(score > 90) { System.out.println("优 秀"); } else { if(score > 80) { System.out.println("良 好"); } else { if(score > 60) { System.out.println("及 格"); } else { System.out.println("不及格"); } } } } }
运行示例,输出结果如下:
及 格
switch 语句也称开关语句,用于实现简单的多路分支结构,语法如下:
switch(<表达式>) { case <常量1>: [<语句1>] case <常量2>: [<语句2>] ... case <常量n>: [<语句n>] [default: <语句n+1>] }
其中,<表达式>应该为 byte、short、char、int 基本类型,也可以是这些基本类型的引用类型 Byte、Short、Character、Integer,还可以是枚举类型 Enum。从 Java SE7 开始,case 标签还可以是字符串字面值。例如:
import java.util.Scanner; public class Demo { public static void main(String[] args) { System.out.println("输入命令(file|help):"); Scanner scanner = new Scanner(System.in); String command = scanner.nextLine(); switch (command) { case "file": System.out.println("打开文件"); break; case "help": System.out.println("显示帮助信息"); break; default: System.out.println("未知命令"); } } }
运行示例,输出结果如下:
输入命令(file|help): help 显示帮助信息
switch 语句执行过程如下:
先计算 switch 表达式的值,再将其依次与各case后跟的常量值比较,如果相等,则执行此 case 后面的语句。即使遇到下一个 case 仍会继续执行,除非遇到 break 语句。如果所有的 case 均没有匹配,则执行 default 后面的语句。例如:
public class Demo { public static void main(String[] args) { Demo demo = new Demo(); System.out.println(demo.show(9)); System.out.println(demo.show(5)); System.out.println(demo.show(2)); System.out.println(demo.show(12)); } private String show(int level) { String message; switch (level) { case 10: case 9: case 8: message = "高级"; break; case 7: case 6: case 5: message = "中级"; break; case 4: case 3: case 2: case 1: message = "低级"; break; default: message = "未知级别"; } return message; } }
运行示例,输出结果如下:
高级 中级 低级 未知级别