阶段01-Java语言基础.md 8.0 KB

阶段一: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、小数默认 doublelongLfloatF
  • 存储单位: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 = 71char 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
  • foreachfor (类型 变量 : 数组),只能遍历全部,无法获取索引

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. 数组作为方法参数

public static void bubbleSort(int[] arr) { }
bubbleSort(myScore);   // 直接传数组名

3. Random 随机数

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. 方法的四象限:有参/无参 × 有返回值/无返回值