【Java零基础30天挑战·Day4】
程序的十字路口:一文彻底搞懂分支结构(if & switch)
📝 前言:在程序的世界里,代码并不总是从上到下一成不变地“直线奔跑”。很多时候,程序需要根据不同的情况做出不同的选择,就像我们走到十字路口需要根据红绿灯决定是走是停一样。这就是今天我们要探讨的核心——分支结构(选择结构)。
本文将从最基础的if语句出发,一路打怪升级到switch,并分享一些日常开发中的避坑经验和代码规范。干货满满,建议收藏!⭐
🌟 一、 什么是分支结构?
在编程中,三大基本结构分别是:顺序结构、分支结构、循环结构。
- 顺序结构:代码从上到下依次执行(默认情况)。
- 分支结构:根据条件判断的结果,选择性地执行某段代码。
分支结构的灵魂在于条件判断,在Java/C等语言中,条件表达式的结果必须是一个布尔值(true 或 false)。
🛤️ 二、 if 分支家族
if家族是最常用的分支结构,它有三种形态:单分支、双分支、多分支。
1. 单分支:如果…就… (if)
当你只有一个条件需要满足时使用。满足就执行,不满足就跳过。
// 语法
if (条件表达式) {
// 条件为 true 时执行的代码
}
// 示例:如果下雨,就带伞
boolean isRaining = true;
if (isRaining) {
System.out.println("外面下雨了,记得带伞!");
}
2. 双分支:如果…否则… (if-else)
非黑即白的选择。条件满足走A逻辑,不满足走B逻辑。
// 语法
if (条件表达式) {
// 条件为 true 时执行
} else {
// 条件为 false 时执行
}
// 示例:判断奇偶数
int num = 10;
if (num % 2 == 0) {
System.out.println(num + "是偶数");
} else {
System.out.println(num + "是奇数");
}
3. 多分支:如果…否则如果…否则… (if - else if - else)
面对多个条件判断时,按顺序从上往下判断,只要有一个条件满足,执行完毕后就会跳出整个if结构。
// 语法
if (条件1) {
// 满足条件1执行
} else if (条件2) {
// 满足条件2执行
} else if (条件3) {
// 满足条件3执行
} else {
// 以上条件都不满足时执行(可省略,但建议保留作为兜底逻辑)
}
// 示例:成绩评级
int score = 85;
if (score >= 90) {
System.out.println("优秀");
} else if (score >= 80) {
System.out.println("良好"); // 执行这里后,直接跳出整个if
} else if (score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
⚠️ 避坑指南1:
else if的顺序非常重要!如果把上面例子中score >= 60放在第一个判断,那么85分也会被判定为“及格”。多分支判断必须注意条件之间的互斥性和顺序。
🔀 三、 switch 分支:精准匹配
当你需要对一个具体的值进行多路匹配时,switch比if-else if看起来更清爽。
1. 基本语法与示例
// 示例:根据星期几输出日程
int day = 3;
switch (day) {
case 1:
System.out.println("周一:开会");
break;
case 2:
System.out.println("周二:写代码");
break;
case 3:
System.out.println("周三:改Bug"); // 匹配成功
break;
// ...省略其他天
default:
System.out.println("休息日");
break;
}
2. switch 的三大铁律
- 支持的类型:在Java中,
switch支持byte, short, int, char, String(Java7+), 枚举。不支持long, float, double及boolean。 break不能忘:如果漏写了break,会发生穿透现象(Fall-through),程序会无条件执行后续的case代码,直到遇到break为止。default的位置:default可以放在任何位置,但习惯上放在最后。它的作用类似于if-else中的else。
💡 巧妙利用穿透:有时候穿透不是Bug而是Feature!比如判断季节:
int month = 5;
switch (month) {
case 3: case 4: case 5:
System.out.println("春季");
break;
case 6: case 7: case 8:
System.out.println("夏季");
break;
// ...
}
⚔️ 四、 if vs switch:到底用哪个?
| 比较维度 | if-else | switch |
|---|---|---|
| 判断条件 | 布尔表达式(范围、大小判断) | 具体的常量值(等值判断) |
| 适用场景 | 区间判断、复杂逻辑判断 | 离散值的多路匹配(如菜单选择、星期) |
| 底层效率 | 逐条判断,效率逐渐降低 | 底层通过跳转表实现,效率恒定(JVM优化) |
| 代码可读性 | 嵌套过多时容易变成“波纹状” | 结构清晰,一目了然 |
总结口诀:
- 等值判断用
switch,区间判断用if。 - 能用
switch的场景一定能用if,反之不然。
🚀 五、 进阶:如何写出优雅的分支代码?
在实际开发中,嵌套过深的 if-else 被称为“箭头代码”(缩进越来越深,形如箭头 >),极其难以阅读。这里分享两个优化技巧:
1. 卫语句提前返回
反面教材:
public void process(Order order) {
if (order != null) {
if (order.isPaid()) {
if (order.hasStock()) {
// 核心业务逻辑(嵌套太深)
System.out.println("开始发货...");
} else {
System.out.println("库存不足");
}
} else {
System.out.println("订单未支付");
}
} else {
System.out.println("订单不存在");
}
}
优化后(提前Return,拒绝嵌套):
public void process(Order order) {
if (order == null) {
System.out.println("订单不存在");
return; // 提前阻断
}
if (!order.isPaid()) {
System.out.println("订单未支付");
return;
}
if (!order.hasStock()) {
System.out.println("库存不足");
return;
}
// 核心业务逻辑(只有一层缩进,清爽!)
System.out.println("开始发货...");
}
2. 永远加上大括号 {}!
哪怕 if 里面只有一行代码,也必须加上 {}。这不仅是为了规范,更是为了防止后续维护时添加代码造成的逻辑错误(著名的苹果SSL漏洞就是这么来的)。
// 极度危险!不要这样写!
if (condition)
doSomething();
// 规范写法
if (condition) {
doSomething();
}
🎯 总结
if是分支结构的主力,适用于所有条件判断;switch是等值匹配的利器,注意别忘了break。- 多分支
if-else if要注意条件顺序;switch不支持浮点型和长整型。 - 实际开发中,要警惕深层嵌套,使用卫语句提前
return优化代码结构。 - 好习惯:永远写上大括号
{}!
💬 互动时间:你在开发中遇到过最离谱的
if-else嵌套有几层?欢迎在评论区吐槽分享!如果觉得本文对你有帮助,别忘了点赞👍 + 关注❤️哦!
💡 给你的发布小贴士(发布前必看):
- 替换代码语言:如果你主要写C/C++,把代码块里的
java换成c,把System.out.println换成printf,把boolean换成bool即可。 - 封面图:在CSDN发布时,加一张好看的封面图(比如一个岔路口的图片,或者代码截图)会大大增加点击率。
- 标签设置:在CSDN发布时,添加标签:
Java基础、初学者、分支结构、if-else、编程思维,有助于获得更多系统推荐流量。
更多推荐
所有评论(0)