Java if 选择结构全解析:从基础到优化的实战指南
一、if 选择结构:程序的 “逻辑分支”
在狂神说 Java 第 36 集课程中,我们系统学习了 if 选择结构的核心用法。作为流程控制的核心组成部分,if 结构决定了程序的执行路径。本文将结合课程内容,深度解析 if 结构的底层原理与实践技巧。
二、if 结构核心语法
1. 单分支结构
我们很多时候需要去判断一个东西是否可行,然后我们才去执行,这样一个过程在程序中用if语句来表示
语法:
if(布尔表达式){
//如果布尔表达式为true将执行的语句
}
在这里插入图片描述
package struct;
import java.util.Scanner;
public class IfDemo01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入内容:");
String s = scanner.nextLine();
//equals:判断字符串是否相等
if(s.equals("hello")){
System.out.println(s);
}
System.out.println("End");
scanner.close();
}
}
2. 双分支结构
那现在有个需求,公司要收购一个软件,成功了,给人支付100万元,失败了,自己找人开发。这样的需求用一个if就搞不定了,我们需要有两个判断,需要一个双选择结构,所以就有了if-else结构。
语法:
if(布尔表达式){
//如果布尔表达式为true
}else{
//如果布尔表达式为false
}
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来
上传
package struct;
import java.util.Scanner;
public class IfDemo02 {
public static void main(String[] args) {
//考试分数大于60分及格,小于60分不及格
Scanner scanner = new Scanner(System.in);
System.out.println("请输入成绩:");
int score = scanner.nextInt();
if (score > 60) {
System.out.println("及格");
}else {
System.out.println("不及格");
}
scanner.close();
}
}
3. 多分支结构
我们发现刚才的代码不符合实际情况,真实的情况还可能存在ABCD,存在区间多级判断。比如90-100就是A,80-90 就是B…等等,在生活中我们很多时候的选择也不仅仅只有两个,所以我们需要一个多选择结构来处理这类问题!
语法:
if(布尔表达式1){
//如果布尔表达式1的值为true执行代码
}else if(布尔表达式2){
//如果布尔表达式2的值为true执行代码
}else if(布尔表达式3){
//如果布尔表达式3的值为true执行代码
}else{
//如果以上布尔表达式都不为ture执行代码
}
if 语句至多有1个else语句,else语句在所有的else if语句之后。
if 语句可以有若干个else if语句,它们必须在else语句之前。
一旦其中一个else if语句检测为 true,其他的else if以及else语句都将跳过执行。
package struct;
import java.util.Scanner;
public class IfDemo03 {
public static void main(String[] args) {
//考试分数大于60分及格,小于60分不及格
Scanner scanner = new Scanner(System.in);
System.out.println("请输入成绩:");
int score = scanner.nextInt();
if (score == 100) {
System.out.println("恭喜满分");
}else if (score < 100 && score >= 90) {
System.out.println("A级");
}else if (score < 90 && score >= 80) {
System.out.println("B级");
}else if (score < 80 && score >= 70) {
System.out.println("C级");
}else if (score < 70 && score >= 60) {
System.out.println("D级");
}else if (score < 60 && score >= 0) {
System.out.println("不及格");
}else{
System.out.println("成绩不合法");
}
scanner.close();
}
}
注意事项:
- 条件表达式必须为 boolean 类型⚠️
- 避免使用
if (condition = true)
的错误写法⚠️
三、嵌套 if 结构
使用嵌套的 if…else 语句是合法的。也就是说你可以在另一个 if 或者 else if 语句中使用 if 或者 else if 语句。你可以像 if 语句一样嵌套 else if…else。
语法:
if(布尔表达式){
////如果布尔表达式 1的值为true执行代码
if(布尔表达式 2){
////如果布尔表达式2的值为true执行代码
}
}
1. 基础嵌套
int age = 25;
boolean isStudent = true;
if (age < 30) {
if (isStudent) {
System.out.println("青年学生");
} else {
System.out.println("青年职场人");
}
}
2. 优化建议
// 反模式(深层嵌套)
if (a > 0) {
if (b > 0) {
if (c > 0) { ... }
}
}
// 推荐做法(提前返回)
if (a <= 0 || b <= 0 || c <= 0) {
return;
}
// 核心逻辑
四、条件表达式优化
1. 逻辑运算符组合
boolean isValid = (age >= 18) && (age <= 65) && (isActive);
2. 三元运算符替代
String result = score >= 60 ? "及格" : "不及格";
3. 空值检查
// 安全写法
if (data != null && data.size() > 0) {
// 处理逻辑
}
五、常见错误与解决方案
1. 缺少大括号
错误示例:
if (condition)
System.out.println("A");
System.out.println("B"); // 无论条件是否成立都会执行⚠️
解决方案:
if (condition) {
System.out.println("A");
System.out.println("B");
}
2. 条件表达式错误
错误示例:
if (score = 60) { // 应为score == 60⚠️
System.out.println("及格");
}
3. 逻辑短路误用
错误示例:
if (data.length() > 0 && data != null) { // 可能空指针⚠️
// 处理逻辑
}
解决方案:
if (data != null && data.length() > 0) { // 先检查空指针
// 处理逻辑
}
六、最佳实践总结
-
条件简化:
// 推荐做法 if (isValid) { ... } // 直接使用布尔变量
-
避免复杂条件:
// 反模式 if (a > 0 && b < 10 || c == 5) { ... } // 推荐做法 boolean complexCondition = (a > 0 && b < 10) || (c == 5); if (complexCondition) { ... }
-
统一代码风格:
// 推荐做法 if (condition) { // 代码块 } else { // 代码块 }
七、高频面试题解析
1. if 和 switch 的区别
维度 | if 结构 | switch 结构 |
---|---|---|
适用场景 | 复杂条件判断 | 等值分支判断 |
表达式类型 | boolean | byte/short/int/char/String/enum |
性能 | 条件多时效率下降 | 分支多时效率更高 |
2. 条件表达式的短路特性
boolean flag = (a == 1) && (b == 2); // 如果a != 1,b不会被计算
八、学习资源推荐
九、总结与互动
通过本文的学习,您将掌握:
- 3 种 if 结构的核心用法
- 嵌套 if 的优化技巧
- 条件表达式的安全写法
- 常见错误的解决方案
疑问引导:您在使用 if 结构时遇到过哪些难以排查的问题?例如:
- 逻辑短路导致的意外结果?
- 复杂条件判断引发的维护难题?
.com/javase/tutorial/java/nutsandbolts/if.html)
九、总结与互动
通过本文的学习,您将掌握:
- 3 种 if 结构的核心用法
- 嵌套 if 的优化技巧
- 条件表达式的安全写法
- 常见错误的解决方案
疑问引导:您在使用 if 结构时遇到过哪些难以排查的问题?例如:
- 逻辑短路导致的意外结果?
- 复杂条件判断引发的维护难题?
欢迎在评论区分享您的解决方案!