# 阶段一:Java 语言基础 —— 核心知识点总纲 > 本阶段涵盖:**Java 入门与数据类型、流程控制与运算符、分支循环与数组、数组进阶与排序算法、方法与 Random** > 细分文档:`按日细分/20260713-笔记.md` ~ `按日细分/20260717-笔记.md` > 学生需要重点理解、背诵、掌握的理论核心知识点。 --- ## 一、Java 入门与数据类型(对应 07-13) ### 1. Java 文件结构与注释 - `.java` 源文件 = Java 代码 + 注释(注释不参与编译运行) - 三种注释:单行 `//`、多行 `/* */`、文档 `/** */`(生成 API 文档) ### 2. 基本数据类型(4 类 8 种,必背) | 类型 | 位数 | 字节 | 范围 | |------|------|------|------| | byte | 8 | 1 | -2⁷ ~ 2⁷-1 | | short | 16 | 2 | -2¹⁵ ~ 2¹⁵-1 | | int | 32 | 4 | -2³¹ ~ 2³¹-1 | | long | 64 | 8 | -2⁶³ ~ 2⁶³-1 | | float | 32 | 4 | ±3.4×10³⁸ | | double | 64 | 8 | ±1.8×10³⁰⁸ | | char | 16 | 2 | 0~65535(Unicode) | | boolean | 1 | 1 | true/false | - 整数默认 `int`、小数默认 `double`;`long` 加 `L`、`float` 加 `F` - 存储单位:1B = 8bit;1KB=1024B;1MB=1024KB;1GB=1024MB;1TB=1024GB ### 3. 基本类型 vs 引用类型(四大区别必背) | 维度 | 基本类型 | 引用类型 | |------|---------|---------| | 存什么 | 直接存"值" | 存空间地址值 | | 默认值 | 0 / 0.0 / false | null | | 赋值 | 复制值,独立 | 复制地址,可能共享 | | 比较 | 比较值 | 比较地址 | > ⚠️ **String 不是关键字**,是引用类型(类),大驼峰命名。 ### 4. 类型转换(必背方向) - **自动转换**:`byte → short → int → long → float → double` - **强制转换**:`(目标类型) 变量`;可能丢精度(`(int)3.94 = 3`)、可能溢出(`(byte)128 = -128`) - **表达式提升**:byte/short/char 参与运算自动提升为 int - **整数除法截断**:`10/3 = 3`(不四舍五入) - **char 本质是数值**:`'A' + 6 = 71`;`char c6 = 97;` → 'a' ### 5. 编码表与 var - ASCII(1字节)/ GBK(中文)/ Unicode(2字节)/ UTF-8(变长,互联网常用) - **var(JDK10+)**:编译时语法糖,只在局部变量用,Java 仍是强类型语言 ## 二、流程控制与运算符(对应 07-14) ### 1. 程序三大结构 顺序结构、分支结构(if-else)、循环结构 ### 2. 算术/赋值/比较运算符要点 - 整数除法截断;0 不能做除数(整数抛 ArithmeticException,浮点得 Infinity/NaN) - 取模符号与被除数一致:`-10 % 3 = -1` - **复合赋值隐含强转**:`a += 6` 可,`a = a + 6` 报错 - **浮点精度陷阱**:`0.1 + 0.2 == 0.3` 为 false,用 printf 或误差范围比较 ### 3. 逻辑运算符(必背真值表) | 运算符 | 名称 | 短路特性 | |--------|------|---------| | `&` | 与 | 无 | | `\|` | 或 | 无 | | `!` | 非 | 单目 | | `&&` | 短路与 | **左边 false 右边不执行** | | `\|\|` | 短路或 | **左边 true 右边不执行** | | `^` | 异或 | 相同 false、不同 true | ### 4. 位运算符(操作整型二进制位) | 运算符 | 规律 | |--------|------| | `&` / `\|` / `^` / `~` | 按位与/或/异或/取反 | | `<<` | 左移,**×2ⁿ**(低位补0) | | `>>` | 右移,**÷2ⁿ**(高位补符号位) | | `>>>` | 无符号右移,高位补0,负数变大正数 | ### 5. 三目运算符与优先级 - `布尔 ? 表达式1 : 表达式2`;简单二选一赋值用三目,复杂用 if-else - **优先级口诀**:括号最高 → 单目 → 乘除 → 加减 → 移位 → 比较 → 相等 → 位逻辑 → 短路逻辑 → 三目 → 赋值最低 ## 三、分支循环与数组(对应 07-15) ### 1. switch 分支 - `if` 范围匹配,`switch` **具体值匹配** - 传统:`case 值:` + `break;`(不写 break 会穿透) - 增强 switch(JDK17+):`case 值 ->` 自带 break、多值匹配 `case "1","2" ->`、switch 表达式必须有 default ### 2. 三种循环对比(必背) | 循环 | 判断时机 | 最少执行次数 | |------|---------|------------| | for | 先判断后执行 | 0 | | while | 先判断后执行 | 0 | | do...while | 先执行后判断 | **1** | ### 3. 循环控制(必背) - `break`:结束整个循环(循环外继续) - `continue`:结束本轮循环(进入下一轮) - `return`:结束整个方法(循环外也不执行) ### 4. 数组(引用类型) - 特点:连续存储、索引访问、固定长度、同类型、索引从 0 开始 - **动态初始化** `new int[10]`(程序员定长度,默认值);**静态初始化** `{1,3,5}`(程序员赋值) - 默认值:int→0、double→0.0、boolean→false、引用→null - 遍历:`for (int i = 0; i < arr.length; i++)` - ⚠️ 越界抛 `ArrayIndexOutOfBoundsException` ### 5. 经典算法 闰年、三数最大值(嵌套三目)、水仙花数(取位:`/100`、`/10%10`、`%10`)、数字加密(取位→加5→%10→互换)、变量交换(加减法/异或法) ## 四、数组进阶与排序算法(对应 07-16) ### 1. 多维数组与 foreach - 二维数组 = 数组的数组(存一维数组引用);遍历两层循环(外层 `arr.length`、内层 `arr[i].length`) - **foreach**:`for (类型 变量 : 数组)`,只能遍历全部,**无法获取索引** ### 2. Arrays 工具类(必背) `sort()`、`toString()`、`copyOf()`、`copyOfRange(arr, from, to)`、`binarySearch()`(**必须先排序**) ### 3. 三种排序算法(必会手写,必背对比) | 特性 | 冒泡 | 选择 | 插入 | |------|------|------|------| | 思想 | 相邻比较大的后冒 | 每轮选最小交换 | 插入已排序区正确位置 | | 每轮交换 | 多次 | **最多1次** | 多次(后移) | | 最好复杂度 | O(n)优化版 | O(n²) | **O(n)** | | 稳定性 | ✅ | ❌ | ✅ | | 实用性 | 低 | 中 | **高** | - 冒泡:外层 n-1 轮,内层 `arr.length-1-i`;布尔标记优化提前结束 - 选择:`minIndex` 记录最小索引,`minIndex != i` 才交换 - 插入:`current = arr[i]`,从后往前找位置,大元素后移,`arr[j+1] = current` ### 4. Scanner 键盘输入(必会) - 四步骤:导包 → `new Scanner(System.in)` → 调用方法 → `close()` - `nextInt()`/`nextDouble()`/`next()`/`nextLine()`/`nextBoolean()`/`next().charAt(0)` - **陷阱**:`nextInt()` 后 `nextLine()` 读到空串(换行符残留)→ 先调一次 `nextLine()` 吃掉换行 - `next()` 以空格/换行结束,`nextLine()` 仅以换行结束 ## 五、方法与 Random(对应 07-17) ### 1. 方法四种声明方式(必背) | 类型 | 格式 | 场景 | |------|------|------| | 无参无返回值 | `void 方法名()` | 输出固定内容 | | 有参无返回值 | `void 方法名(参数)` | 执行操作并输出 | | 有参有返回值 | `类型 方法名(参数)` | 计算并返回 | | 无参有返回值 | `类型 方法名()` | 获取常量/随机数 | - 无返回值必须 `void` 占位;有返回值用 `return` - **方法中可调用方法**(复用):`rotundityArea()` 内部调用 `getPI()` ### 2. 数组作为方法参数 ```java public static void bubbleSort(int[] arr) { } bubbleSort(myScore); // 直接传数组名 ``` ### 3. Random 随机数 ```java Random ran = new Random(); ran.nextInt(); // 任何 int ran.nextInt(100); // 0~99 ran.nextInt(6) + 1; // 1~6(偏移) ``` > 对比 `Math.random()`:double (0.0~1.0),需手动运算范围。 ## 本阶段必须背诵的核心口诀 1. **整数默认 int,小数默认 double** 2. **自动转换方向**:byte → short → int → long → float → double 3. **整数除法砍小数、取模符号随被除数** 4. **短路与短路或**:&& 左 false 右不跑、|| 左 true 右不跑 5. **左移×2、右移÷2、无符号右移补0** 6. **do...while 至少执行一次** 7. **break 结束整个循环、continue 结束本轮、return 结束方法** 8. **冒泡稳定、选择不稳定、插入最实用** 9. **Scanner 陷阱**:nextInt 后 nextLine 需先吃换行 10. **方法的四象限**:有参/无参 × 有返回值/无返回值