第一部分:if语句基础

if语句是Java中最基础的条件控制结构,用于根据条件执行不同的代码块

学习目标

掌握if语句的基本语法和使用场景,能够编写简单的条件判断代码

1

基本语法结构

if语句的基本语法格式:

if (条件表达式) { // 条件为true时执行的代码 }

示例:判断成绩是否及格

int score = 75; if (score >= 60) { System.out.println("恭喜,考试及格!"); }
2

布尔条件表达式

if语句的条件必须是一个布尔表达式(结果为true或false)

  • 关系运算符: >, <,>=, <=, ==, !=
  • 逻辑运算符: && (与), || (或), ! (非)

示例:多个条件的组合

int age = 20; boolean hasLicense = true; if (age >= 18 && hasLicense) { System.out.println("可以合法驾驶"); }

学习小贴士

在Java中,if语句的条件必须是一个布尔值,不能像某些语言那样使用0或1代替。常见的错误是在条件中使用赋值运算符(=)而不是相等运算符(==),如if (x = 5)会导致编译错误。

动手练习

  • 编写程序判断一个数是否是偶数
  • 编写程序判断年份是否是闰年(能被4整除但不能被100整除,或能被400整除)
  • 编写程序判断用户输入的年龄是否大于等于18岁

第二部分:if-else语句

当需要根据条件执行不同分支时,使用if-else结构

学习目标

掌握if-else语句的使用方法,能够处理两种互斥情况

1

基本语法结构

if-else语句的基本格式:

if (条件表达式) { // 条件为true时执行的代码 } else { // 条件为false时执行的代码 }

示例:判断数字正负

int number = -5; if (number >= 0) { System.out.println("这是一个非负数"); } else { System.out.println("这是一个负数"); }
2

流程图解析

if-else语句的执行流程:

if-else流程图

注意:else分支是可选的,但必须紧跟在if代码块之后

学习小贴士

当if或else代码块中只有一条语句时,可以省略花括号{}。但为了代码清晰和避免错误,建议始终使用花括号包裹代码块。

动手练习

  • 编写程序判断一个数是奇数还是偶数
  • 编写登录验证程序:用户名和密码都正确输出"登录成功",否则输出"用户名或密码错误"
  • 编写程序判断一个字符是元音字母还是辅音字母

第三部分:else-if语句

处理多个互斥条件的分支情况

学习目标

掌握else-if结构的使用,能够处理多个条件分支

1

基本语法结构

else-if语句的基本格式:

if (条件1) { // 条件1为true时执行 } else if (条件2) { // 条件2为true时执行 } else if (条件3) { // 条件3为true时执行 } else { // 所有条件都不满足时执行 }

示例:成绩等级划分

int score = 85; if (score >= 90) { System.out.println("优秀"); } else if (score >= 80) { System.out.println("良好"); } else if (score >= 70) { System.out.println("中等"); } else if (score >= 60) { System.out.println("及格"); } else { System.out.println("不及格"); }
2

执行顺序与注意事项

  • 条件从上到下依次检查
  • 一旦某个条件满足,执行对应代码块后即退出整个结构
  • else分支是可选的,但只能有一个
  • 条件的顺序很重要,应把最可能满足的条件放在前面

重要:避免重叠的条件范围,确保条件互斥

学习小贴士

当条件分支超过3个时,考虑使用switch语句可能更清晰。但switch只能用于等值判断,而if-else可以处理范围判断和复杂条件。

动手练习

  • 编写程序将分数转换为等级:A(90-100), B(80-89), C(70-79), D(60-69), F(0-59)
  • 编写BMI分类程序:体重过轻(BMI<18.5), 正常(18.5-24.9), 超重(25-29.9), 肥胖(>=30)
  • 编写程序根据月份输出季节:12-2月冬季,3-5月春季,6-8月夏季,9-11月秋季

第四部分:三元运算符

简洁的条件表达式语法

学习目标

掌握三元运算符的语法和使用场景,能够简化简单的if-else结构

1

基本语法结构

三元运算符的基本格式:

条件 ? 表达式1 : 表达式2

如果条件为true,返回表达式1的值;否则返回表达式2的值

示例:求两个数的最大值

int a = 10, b = 20; int max = (a > b) ? a : b; System.out.println("最大值是: " + max); // 输出20
2

与if-else的比较

特性 三元运算符 if-else语句
语法 紧凑,单行 需要多行
返回值 必须返回值 可以没有返回值
代码块 只能是单表达式 可以是多行代码块
可读性 简单条件时更清晰 复杂逻辑时更清晰
嵌套 可以嵌套但易混乱 支持清晰嵌套

学习小贴士

三元运算符非常适合简单的条件赋值操作,但应避免过度嵌套,如(a ? (b ? c : d) : (e ? f : g))这样的代码会降低可读性。当逻辑复杂时,优先使用if-else语句。

动手练习

  • 使用三元运算符判断一个数是奇数还是偶数
  • 使用三元运算符判断年份是否为闰年
  • 使用三元运算符将数字的绝对值赋给一个新变量
  • 使用嵌套三元运算符实现成绩等级划分(A/B/C/D/F)

第五部分:嵌套条件语句

在条件语句内部再包含条件语句

学习目标

掌握嵌套条件语句的使用方法,能够处理复杂逻辑判断

1

基本语法结构

嵌套if语句的基本格式:

if (条件1) { // 条件1为true时执行 if (条件2) { // 条件1和条件2都为true时执行 } else { // 条件1为true但条件2为false时执行 } } else { // 条件1为false时执行 }

示例:登录系统多级验证

boolean isUserValid = true; boolean isPasswordCorrect = false; if (isUserValid) { if (isPasswordCorrect) { System.out.println("登录成功!"); } else { System.out.println("密码错误,请重试"); } } else { System.out.println("用户名不存在"); }
2

避免过度嵌套

过度嵌套会导致代码难以阅读和维护:

  • 使用卫语句(Guard Clauses)提前返回
  • 将复杂条件提取为布尔变量或方法
  • 考虑使用策略模式重构

重构示例:

// 重构前(嵌套过深) if (condition1) { if (condition2) { if (condition3) { // 核心逻辑 } } } // 重构后(使用卫语句) if (!condition1) { return; // 提前退出 } if (!condition2) { return; } if (!condition3) { return; } // 核心逻辑

学习小贴士

在编写嵌套条件语句时,合理的缩进至关重要。建议每个嵌套层级缩进4个空格,这有助于保持代码结构清晰。现代IDE如IntelliJ IDEA可以自动格式化代码,使用快捷键Ctrl+Alt+L(Windows)或Cmd+Option+L(Mac)可以快速格式化代码。

动手练习

  • 编写程序判断一个年份是否是闰年,并判断该年份的2月有多少天
  • 编写电商折扣系统:会员且订单金额大于1000打9折,会员但金额不足1000打95折,非会员不打折
  • 编写三角形类型判断程序:先判断能否构成三角形,再判断是等边、等腰还是普通三角形

第六部分:最佳实践与常见错误

编写高质量条件语句的技巧和注意事项

学习目标

掌握条件语句的最佳实践,避免常见错误,编写可读性高的代码

最佳实践

  • 始终使用花括号{}包裹代码块
  • 保持条件表达式简单,复杂逻辑提取为方法
  • 使用有意义的布尔变量名
  • 避免在条件中写复杂表达式
  • 优先处理简单或常见情况
  • 使用final修饰符声明不会改变的变量

常见错误

  • 在条件中使用赋值运算符(=)而非相等运算符(==)
  • 在布尔条件中误用位运算符(&, |)而非逻辑运算符(&&, ||)
  • 浮点数使用==进行相等比较(应使用差值范围判断)
  • 字符串使用==比较而非equals()方法
  • 忽略边界条件(如使用score > 90而非score >= 90)

性能优化

  • 将最可能为true的条件放在前面
  • 避免在循环内部进行不必要的条件判断
  • 使用switch替代多个if-else if链
  • 使用查找表替代复杂条件分支
  • 考虑使用多态替代条件语句

学习小贴士

在条件语句中,短路求值(Short-circuit Evaluation)是一个重要特性。当使用&&运算符时,如果左侧表达式为false,右侧表达式将不会执行。同样,当使用||运算符时,如果左侧表达式为true,右侧表达式也不会执行。合理利用这一特性可以提高性能并避免不必要的计算。

综合练习

  • 编写个人所得税计算程序:根据收入范围应用不同税率
  • 编写日期验证程序:检查输入的年月日是否合法(考虑闰年)
  • 编写简单计算器:支持加减乘除,根据用户输入的运算符执行不同计算
  • 编写用户权限系统:根据用户角色(admin, editor, viewer)显示不同菜单选项