在 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;
}
}运行示例,输出结果如下:
高级 中级 低级 未知级别