在实际生活中经常需要做出一些判断,比如开车来到一个十字路口,就需要对红绿灯进行判断,如果前面是红灯,就停车等候,如果是绿灯,就通行。Java中有一种特殊的语句叫做选择语句,它也需要对一些条件做出判断,从而决定执行哪一段代码。选择语句分为if条件语句和switch条件语句。
if语句是指如果满足某种条件,就进行某种处理。例如,小明妈妈跟小明说“如果你考试得了100分,星期天就带你去游乐场玩”。这句话可以通过下面的一段伪代码来描述。
- 如果小明考试得了100分
- 妈妈星期天带小明去游乐场
在上面的伪代码中,“如果”相当于Java中的关键字if,“小明考试得了100分”是判断条件,需要用()括起来,“妈妈星期天带小明去游乐场”是执行语句,需要放在{}中。修改后的伪代码如下:
- if (小明考试得了100分) {
- 妈妈星期天带小明去游乐场
- }
通过上面的伪代码可以总结出if语句的格式:
- if (条件语句){
- 代码块
- }
流程图如下:

接下来通过一个案例学习if语句的具体用法。
- public class Example07 {
- public static void main(String[] args) {
- int x = 5;
- if (x < 10) {
- x++;
- }
- System.out.println("x=" + x);
- }
- }
if…else语句是指如果满足某种条件,就进行某种处理,否则就进行另一种处理。例如,要判断一个正整数的奇偶,如果该数字能被2整除则是一个偶数,否则该数字就是一个奇数。
if…else语句具体语法格式如下: if (判断条件){ 执行语句1 ... } else{ 执行语句2 ... }
流程图如下:

接下来通过一个案例实现判断奇偶数的程序。
- public class Example08 {
- public static void main(String[] args) {
- int num = 19;
- if (num % 2 == 0) {
- // 判断条件成立,num被2整除
- System.out.println("num是一个偶数");
- } else {
- System.out.println("num是一个奇数");
- }
- }
- }
if…else if…else语句用于对多个条件进行判断,进行多种不同的处理。例如,对一个学生的考试成绩进行等级划分,如果分数大于80分,则等级为优;如果分数大于70分,则等级为良;如果分数大于60分,则等级为中;如果分数小于60分,则等级为差。
if…else if…else语句格式:
- if (判断条件1) {
- 执行语句1
- }
- else if (判断条件2) {
- 执行语句2
- }
- ...
- else if (判断条件n) {
- 执行语句n
- }
- else {
- 执行语句n+1
- }
流程图如下:

接下来通过一个案例演示if…else if…else语句的用法,该案例实现对学生考试成绩进行等级划分的程序。
- public class Example09 {
- public static void main(String[] args) {
- int grade = 75; // 定义学生成绩
- if (grade > 80) {
- // 满足条件 grade > 80
- System.out.println("该成绩的等级为优");
- } else if (grade > 70) {
- // 不满足条件 grade > 80 ,但满足条件 grade > 70
- System.out.println("该成绩的等级为良");
- } else if (grade > 60) {
- // 不满足条件 grade > 70 ,但满足条件 grade > 60
- System.out.println("该成绩的等级为中");
- } else {
- // 不满足条件 grade > 60
- System.out.println("该成绩的等级为差");
- }
- }
- }
Java提供了一个三元运算符,可以同时操作三个表达式。三元运算符语法格式如下所示:
判断条件 ? 表达式1 : 表达式2
在上述语法格式中,当判断条件成立时,计算表达式1的值作为整个表达式的结果,否则计算表达式2的值作为整个表达式的结果。
使用三元运算符时需要注意以下几点:
(1)条件运算符“?”和“:”是一对运算符,不能分开单独使用。
(2)条件运算符的优先级低于关系运算符与算术运算符,但高于赋值运算符。
(3)条件运算符可以进行嵌套,结合方向自右向左。例如,a>b?a:c>d?c:d应该理解为a>b?a:(c>d?c:d),这也是条件运算符的嵌套情形,即三元表达式中的表达式2又是一个三元表达式。
switch 条件语句也是一种很常用的选择语句,和if条件语句不同,它只能针对某个表达式的值做出判断,从而决定程序执行哪一段代码。例如,在程序中使用数字1~7表示星期一到星期天,如果想根据输入的数字输出对应中文格式的星期值,可以通过下面的一段伪代码来描述:
- 用于表示星期的数字
- 如果等于1,则输出星期一
- 如果等于2,则输出星期二
- 如果等于3,则输出星期三
- 如果等于4,则输出星期四
- 如果等于5,则输出星期五
- 如果等于6,则输出星期六
- 如果等于7,则输出星期天
上述伪代码,如果使用if…else语句实现,则代码太过繁琐,不便于阅读。为此,Java提供了switch语句实现这种需求,switch语句使用switch关键字描述一个表达式,使用case关键字描述和表达式结果比较的目标值,当表达式的值和某个目标值匹配时,就执行对应case下的语句。
- switch (表达式){
- case 目标值1:
- 执行语句1
- break;
- case 目标值2:
- 执行语句2
- break;
- ......
- case 目标值n:
- 执行语句n
- break;
- default:
- 执行语句n+1
- break;
- }
switch语句将表达式的值与每个case中的目标值进行匹配,如果找到了匹配的值,则执行对应case后面的语句;如果没找到任何匹配的值,则执行default后的语句。switch语句中的break关键字将在后面的小节中做具体介绍,此处,初学者只需要知道break的作用是跳出switch语句即可。
接下来通过一个案例来演示switch语句的用法,在该案例中,使用switch语句根据给出的数值输出对应中文格式的星期。
- public class Example10{
- public static void main(String[] args) {
- int week = 5;
- switch (week) {
- case 1:
- System.out.println("星期一");
- break;
- case 2:
- System.out.println("星期二");
- break;
- case 3:
- System.out.println("星期三");
- break;
- case 4:
- System.out.println("星期四");
- break;
- case 5:
- System.out.println("星期五");
- break;
- case 6:
- System.out.println("星期六");
- break;
- case 7:
- System.out.println("星期天");
- break;
- default:
- System.out.println("输入的数字不正确...");
- break;
- }
- }
- }
在使用switch语句时,如果多个case条件后面的执行语句是一样的,则执行语句只需书写一次即可。例如,要判断一周中的某一天是否为工作日,同样使用数字1~7表示星期一到星期天,当输入的数字为1、2、3、4、5时就视为工作日,否则就视为休息日。
- public class Example11 {
- public static void main(String[] args) {
- int week = 2;
- switch (week) {
- case 1:
- case 2:
- case 3:
- case 4:
- case 5:
- // 当 week 满足值 1、2、3、4、5 中任意一个时,处理方式相同
- System.out.println("今天是工作日");
- break;
- case 6:
- case 7:
- // 当 week 满足值 6、7 中任意一个时,处理方式相同
- System.out.println("今天是休息日");
- break;
- }
- }
- }
注意:在JDK5之前,switch语句中的表达式只能是byte、short、char、int类型的值,如果传入其他类型的值,程序会报错。JDK5引入了新特性,enum枚举可以作为switch语句表达式的值;JDK7中也引入了新特性,switch语句可以接收一个String类型的值。