【Java SE 基础学习打卡】22 分支结构 - if

目录

  • 前言
  • [一、先搞懂:if 语句的核心逻辑](#一、先搞懂:if 语句的核心逻辑)
  • [二、逐个攻破:3 种 if 语句用法(语法 + 例子 + 流程图)](#二、逐个攻破:3 种 if 语句用法(语法 + 例子 + 流程图))
    • [2.1 单分支 if:满足条件才做事,不满足就跳过](#2.1 单分支 if:满足条件才做事,不满足就跳过)
    • [2.2 双分支 if-else:二选一,必执行其中一个](#2.2 双分支 if-else:二选一,必执行其中一个)
    • [2.3 多分支 if-else if-else:多选一,按顺序匹配](#2.3 多分支 if-else if-else:多选一,按顺序匹配)
  • [三、语法细节补充:这些 "小规则" 决定代码是否能跑通](#三、语法细节补充:这些 “小规则” 决定代码是否能跑通)
    • [3.1 条件表达式的合法类型](#3.1 条件表达式的合法类型)
    • [3.2 代码块的作用域](#3.2 代码块的作用域)
    • [3.3 分号的 "坑"](#3.3 分号的 “坑”)
  • [四、小白必避的 5 个 "致命坑"](#四、小白必避的 5 个 “致命坑”)
    • [4.1 坑 1:条件里用`=`代替`==`(最常见)](#4.1 坑 1:条件里用=代替==(最常见))
    • [4.2 坑 2:省略大括号导致代码 "失控"](#4.2 坑 2:省略大括号导致代码 “失控”)
    • [4.3 坑 3:多分支条件顺序写反(逻辑混乱)](#4.3 坑 3:多分支条件顺序写反(逻辑混乱))
    • [4.4 坑 4:嵌套 if 的 else 匹配错误](#4.4 坑 4:嵌套 if 的 else 匹配错误)
  • 总结

前言

上一节咱们聊到流程控制里的 "分支结构" 就像给程序装了个 "决策大脑",而if语句就是这个大脑最核心的 "思考工具"。比如 "如果体温超过 37.3℃就需要复测""如果余额不足就提示充值""如果考试分数够高就评优秀",这些生活中随处可见的判断场景,用if语句都能轻松实现。

这一节咱们把if拆解得明明白白:先吃透核心逻辑,再逐个攻破三种分支用法(单分支、双分支、多分支),每个知识点都配超详细语法说明生活化例子直观流程图,最后汇总新手必避的 "致命坑"------ 保证刚学完变量和运算符的你,不仅会用,还能避开 90% 的错误!

一、先搞懂:if 语句的核心逻辑

if语句的本质,就是模拟人类的 "判断思维"------先设定一个 "判断条件",再明确 "条件成立时做什么""条件不成立时做什么"

举个生活里的例子:你打算周末出游,会先判断 "天气是否晴朗"(条件):

  • 条件成立(晴朗)→ 去公园野餐(执行 A 操作);

  • 条件不成立(下雨)→ 在家看电影(执行 B 操作)。

对应到 Java 里,if语句的核心逻辑可以浓缩成一句话:

条件为true(成立),就走 "成立" 的代码路;条件为false(不成立),就走 "不成立" 的代码路(或跳过)。

这里有两个关键前提,小白必须记牢:

  1. 「条件」必须是 "布尔表达式"------ 也就是能明确算出truefalse的式子,比如age > 18score == 100,不能是数字、字符串(比如if (5)if ("晴天")都是错的);

  2. 「执行代码」必须用{ }包裹 ------ 哪怕只有一行代码,也建议加{ },否则会出现代码 "失控" 的情况(后面避坑部分会详细说)。

二、逐个攻破:3 种 if 语句用法(语法 + 例子 + 流程图)

if语句有三种核心用法,从简单到复杂逐步升级,覆盖所有日常判断场景。每种用法都先给 "死记硬背" 的语法模板,再配生活例子和代码,最后用流程图直观展示执行路径。

2.1 单分支 if:满足条件才做事,不满足就跳过

适用场景:只需要在 "条件成立" 时执行操作,不成立就啥也不做(或执行后续无关代码)。

语法模板(必须记牢)

java 复制代码
if (条件表达式) {  
    // 代码块:条件成立时才执行(1行或多行都可以)  
}  
// 条件不成立时,直接跳过代码块,执行这里的代码(不受if控制)  

语法细节补充

  • (条件表达式):括号不能省略!里面必须是布尔表达式(结果true/false),比如pocketMoney > 50isStudent == true

  • { }:称为 "代码块",包裹的代码是一个整体 ------ 条件成立时,会把代码块里的所有代码都执行一遍;

  • 代码块后面不用加;if语句的结束标志是代码块的},不是;,加了;会导致逻辑错误(比如if (a>10); { ... },代码块会无条件执行)。

生活场景:如果零花钱超过 50 元,就买一本漫画书

java 复制代码
public static void main(String[] args) {  
    // 定义变量:当前零花钱(单位:元)------之前学的int类型  
    int pocketMoney = 60;  

    // 单分支if判断:如果零花钱>50,就执行买漫画的代码  
    if (pocketMoney > 50) { // 条件:零花钱超过50元(true)  
        System.out.println("零花钱够啦~");  
        System.out.println("买一本《海贼王》漫画书!");  
        System.out.println("剩下的钱买瓶可乐~");  
    }  

    // 不管条件成立与否,都会执行这句话(不受if控制)  
    System.out.println("回家啦~");  
}  

执行结果(60>50 成立):

Plain 复制代码
零花钱够啦~  
买一本《海贼王》漫画书!  
剩下的钱买瓶可乐~  
回家啦~  

流程图(直观看懂执行路径)

小改动测试

如果把pocketMoney改成 40(条件不成立),执行结果会变成:

Plain 复制代码
回家啦~ 

if代码块里的内容全被跳过。

2.2 双分支 if-else:二选一,必执行其中一个

适用场景:需要明确 "条件成立" 和 "条件不成立" 的两种操作,比如 "及格就玩,不及格就刷题""有票就进场,没票就离开"------ 没有第三种选择。

语法模板(必须记牢)

java 复制代码
if (条件表达式) {  
    // 代码块1:条件成立时执行  
} else {  
    // 代码块2:条件不成立时执行  
}  

语法细节补充

  • else:意思是 "否则",后面没有括号,也没有条件 ------ 它永远对应 "前面if条件不成立" 的情况;

  • 二选一规则:代码块 1 和代码块 2 "必执行且仅执行一个",不会都执行,也不会都不执行;

  • else后面的{ }同样不能省:哪怕代码块 2 只有一行代码,省了{ }可能导致后续代码失控。

生活场景:如果考试及格(≥60 分),就出去玩;否则在家刷题

java 复制代码
public static void main(String[] args) {  
    // 定义变量:考试分数------之前学的int类型  
    int examScore = 58;  

    // 双分支判断:及格与否二选一  
    if (examScore >= 60) { // 条件:分数≥60(false)  
        System.out.println("分数:" + examScore + "分");  
        System.out.println("及格啦!约同学去打球~");  
    } else { // 条件不成立时执行  
        System.out.println("分数:" + examScore + "分");  
        System.out.println("没及格,在家刷《Java基础100题》~");  
    }  
}  

执行结果(58≥60 不成立):

Plain 复制代码
分数:58分  
没及格,在家刷《Java基础100题》~

流程图(直观看懂执行路径)

小改动测试

如果把examScore改成 65(条件成立),执行结果会变成:

Plain 复制代码
分数:65分  
及格啦!约同学去打球~  

2.3 多分支 if-else if-else:多选一,按顺序匹配

适用场景:有多个条件需要依次判断,比如 "根据分数评等级""根据月份判断季节"------ 按顺序匹配,只执行第一个成立的条件。

语法模板(必须记牢)

java 复制代码
if (条件1) {  
    // 代码块1:条件1成立时执行  
} else if (条件2) {  
    // 代码块2:条件1不成立,但条件2成立时执行  
} else if (条件3) {  
    // 代码块3:条件1、2都不成立,但条件3成立时执行  
} else {  
    // 代码块4:所有条件都不成立时执行(可选,可省略)  
}  

语法细节补充

  • 顺序优先:必须按 "条件范围从窄到宽" 或 "优先级从高到低" 排序,比如评等级要先判断 90+(窄范围),再判断 80+,最后判断 60+(宽范围);

  • 唯一执行:只要有一个条件成立,执行对应的代码块后,就会跳过后面所有的else ifelse,不会再判断;

  • else可选:如果所有条件都不成立,且没有else,则多分支语句什么都不执行,直接往下走。

生活场景:根据期末成绩评等级(90 + 优秀,80-89 良好,60-79 及格,<60 不及格)

java 复制代码
public static void main(String[] args) {  
    // 定义变量:期末成绩------之前学的int类型  
    int finalScore = 85;  

    // 多分支判断:按顺序匹配条件(从窄范围到宽范围)  
    if (finalScore >= 90) { // 条件1:90+(最窄)  
        System.out.println("成绩:" + finalScore + "分 → 等级:优秀");  
    } else if (finalScore >= 80) { // 条件2:80-89(次窄)  
        System.out.println("成绩:" + finalScore + "分 → 等级:良好");  
    } else if (finalScore >= 60) { // 条件3:60-79(较宽)  
        System.out.println("成绩:" + finalScore + "分 → 等级:及格");  
    } else { // 所有条件都不成立(<60)  
        System.out.println("成绩:" + finalScore + "分 → 等级:不及格");  
    }  
}  

执行结果(85≥90 不成立,85≥80 成立):

Plain 复制代码
成绩:85分 → 等级:良好 

流程图(直观看懂执行路径)

小改动测试

如果把finalScore改成 55(所有条件都不成立),执行结果会变成:

Plain 复制代码
成绩:55分 → 等级:不及格  

三、语法细节补充:这些 "小规则" 决定代码是否能跑通

除了上面的核心用法,还有几个语法细节,小白容易忽略,但直接影响代码是否能编译通过:

3.1 条件表达式的合法类型

  • 只能是布尔类型(true/false),以下情况都不合法:

    • 数字类型:if (5)if (score)(错,5 和 score 是 int,不是布尔值);

    • 字符串类型:if ("及格")(错,字符串不能直接作为条件);

    • 赋值语句:if (age = 18)(错,=是赋值,不是判断,结果是 18,不是布尔值)。

  • 合法的条件表达式示例:

    • 关系运算:age > 18score == 100height <= 120

    • 逻辑运算:isStudent && hasID(既是学生又有身份证)、isRain || isWind(下雨或刮风);

    • 布尔变量:if (isPass)(等价于if (isPass == true))、if (!isRain)(等价于if (isRain == false))。

3.2 代码块的作用域

  • 代码块里的变量,只能在代码块内部使用,外部无法访问:

    java 复制代码
    if (score >= 60) {  
        String result = "及格";  
        System.out.println(result); // 合法,在代码块内  
    }  
    System.out.println(result); // 报错!result是代码块内的变量,外部无法访问  
  • 代码块外部的变量,代码块内部可以访问:

    java 复制代码
    String name = "小明";  
    if (score >= 60) {  
        System.out.println(name + "及格了"); // 合法,能访问外部变量name  
    }  

3.3 分号的 "坑"

  • if后面不能加;:加了;会导致代码块无条件执行(;表示if语句结束):

    java 复制代码
    if (score >= 60); { // 这里加了;,if语句已经结束  
        System.out.println("及格"); // 不管score是否≥60,都会执行  
    }  
  • 代码块内部的语句需要加;:每个执行语句结尾必须加;,比如System.out.println("及格");

四、小白必避的 5 个 "致命坑"

这 5 个坑是新手最常犯的,每个都附了错误示例、正确示例和后果说明,一定要记牢!

4.1 坑 1:条件里用=代替==(最常见)

  • 错误示例

    java 复制代码
    int age = 18;  
    if (age = 18) { // 错把赋值"="当判断"=="  
        System.out.println("成年了");  
    }  
  • 后果 :编译报错!age = 18是赋值语句,结果是 18(int 类型),而if条件必须是布尔类型(true/false),类型不匹配。

  • 正确示例

    java 复制代码
    if (age == 18) { // 用"=="判断是否相等  
        System.out.println("成年了");  
    }  

4.2 坑 2:省略大括号导致代码 "失控"

  • 错误示例

    java 复制代码
    int score = 55;  
    if (score >= 60)  
        System.out.println("及格");  
        System.out.println("可以玩游戏"); // 不受if控制,永远执行  
  • 后果 :不管score是否≥60,"可以玩游戏" 都会打印 ------ 因为省略{ }时,if只控制紧跟的第一行代码,后面的代码是独立的,不受条件影响。

  • 正确示例

    java 复制代码
    if (score >= 60) {  
        System.out.println("及格");  
        System.out.println("可以玩游戏"); // 只有条件成立才执行  
    }  

4.3 坑 3:多分支条件顺序写反(逻辑混乱)

  • 错误示例

    java 复制代码
    int score = 85;  
    if (score >= 60) { // 先判断宽范围(60+),85分会直接匹配  
        System.out.println("及格");  
    } else if (score >= 80) { // 永远不会执行!  
        System.out.println("良好");  
    }  
  • 后果:85 分明明该评 "良好",却被当成 "及格"------ 因为条件顺序从宽到窄,先匹配到宽范围,后面的窄范围条件永远没机会判断。

  • 正确示例

    java 复制代码
    if (score >= 80) { // 先判断窄范围(80+)  
        System.out.println("良好");  
    } else if (score >= 60) { // 再判断宽范围(60+)  
        System.out.println("及格");  
    }  

4.4 坑 4:嵌套 if 的 else 匹配错误

  • 错误示例

    java 复制代码
    int a = 3;  
    int b = 5;  
    if (a > 2)  
        if (b > 10)  
            System.out.println("b很大");  
    else // else默认匹配最近的if(即b>10),不是外层的a>2!  
        System.out.println("a不大");  
  • 后果 :逻辑混乱!else实际匹配的是内层if (b>10),而不是外层if (a>2)------ 当b=5时,b>10不成立,会执行else的 "a 不大",但a=3明明大于 2,明显矛盾。

  • 正确示例

    java 复制代码
    if (a > 2) { // 用大括号明确外层if的范围  
        if (b > 10) {  
            System.out.println("b很大");  
        }  
    } else { // 明确匹配外层if  
        System.out.println("a不大");  
    }  

总结

这一节咱们把if语句的核心逻辑、三种用法、语法细节和避坑指南全讲透了,记住 3 个核心点:

  1. 核心逻辑:if是 "判断工具",条件true执行对应代码块,false执行 else(或跳过);

  2. 三种用法:单分支(满足才做)、双分支(二选一)、多分支(多选一,顺序优先);

  3. 避坑关键:条件用==不用=、必加大括号、多分支条件从窄到宽排、条件必须是布尔值。

相关推荐
Ivy_belief2 小时前
C++新特性汇总:涵盖C++11到C++23
java·c++·c++11·c++23
哈哈哈笑什么2 小时前
Spring Boot接口国际化异常信息方案
java·spring boot·后端
qq_162987692 小时前
SpringBoot框架选型
java·spring boot·后端
爱学习的小可爱卢2 小时前
JavaEE进阶-SpringBoot三层架构:餐厅模式解析
java·java-ee
掉鱼的猫2 小时前
Java 低代码平台的“动态引擎”:Liquor
java·低代码·groovy
TT哇3 小时前
【Database Navigator 插件】idea 社区版连接 mysql 数据库
java·数据库·mysql·intellij-idea·database
Tony__Ferguson3 小时前
抽奖系统测试报告
java·功能测试·模块测试
做人不要太理性3 小时前
【Linux系统】ELF 文件格式的硬核揭秘
java·linux·服务器
zhglhy3 小时前
Jaccard相似度算法原理及Java实现
java·开发语言·算法