☕ 第二章 Java编程基础

2.8 本章小结

📄 一句话概括

第二章练出的能力链:立规矩 → 记住东西 → 会算会判断 → 会分岔 → 会重复 → 会打包 → 会成排管理。本章不教新东西,只给复习装备:速查表、名坑回顾、毕业自检。


1. 七节串成一条线

2.1 基本语法   立规矩(代码格式 / 注释 / 标识符 / 六种常量)
  ↓
2.2 变量       学会"记"(三要素 / 赋值 = / 作用域 / 三条铁律)
  ↓
2.3 运算符     学会"算"(四大家族 / 整数除法砍小数 / boolean 上岗)
  ↓
2.4 选择结构   学会"分岔"(if 阶梯挨个问 / switch 对号入座)
  ↓
2.5 循环结构   学会"重复"(三要素 / for·while·do…while / break·continue)
  ↓
2.6 方法       学会"打包"(五部位 / 形参实参 / return 交货)
  ↓
2.7 数组       学会"成排"(索引从 0 / length / 遍历求和求最值)

2. 概念速查表(13 条,每条一句话)

# 概念 一句话
1 类 所有代码都必须住在类里,文件名 = public 类名
2 变量 内存格子贴标签:类型定格子、名字是标签、值可换
3 = 与 == = 赋值(装进格子),== 判断(问等不等)
4 整数除法 int ÷ int 结果还是 int,小数直接砍掉(10/3=3)
5 % 取余 拿余数:判奇偶(n%2)、拆个位(n%10)
6 字符串 + + 一边是字符串就变拼接,从左到右
7 if 阶梯 从上往下挨个问,命中即停——顺序就是逻辑
8 switch case 是入口、break 是出口、default 兜底;不收 long/double/boolean
9 循环三要素 初始化(一次)· 条件(闸门)· 更新(每圈末尾),缺更新 = 死循环
10 break / continue 急刹走人 vs 跳过本轮接着转
11 方法 会做事的积木;返回值类型↔return、参数列表↔实参,两个必须配对
12 传参复制 int 传的是值复制(改了不影响外面);数组传的是地址复制(真会变)
13 数组 一排带编号的格子;编号从 0,length 不加括号,越界运行才炸

3. 代码模板速查(背下来能救命)

// 遍历三件套(数组的日常)
for (int i = 0; i < arr.length; i++) { ... }

// 累加器(sum 必须声明在循环外)
int sum = 0;
for (int i = 0; i < arr.length; i++) { sum += arr[i]; }

// 擂台求最大值(从 arr[0] 起步,不是 0!)
int max = arr[0];
for (int i = 1; i < arr.length; i++) { if (arr[i] > max) max = arr[i]; }

// 方法定义骨架
public static 返回值类型 方法名(参数列表) { ...; return 结果; }

4. 本章名坑回顾(8 个,全是将来真会撞的)

  1. if 后乱加分号——空语句吃掉 if 的身体,编译不报错结果不对(2.4)
  2. else if 乱序——大范围条件放前面,小范围永远轮不到(2.4)
  3. 忘写 break 穿透——case 只是入口标签(2.4)
  4. 循环忘 i++——条件恒成立,死循环;卡死 ■ 强停(2.5)
  5. 差一错误——i < length 和 i <= length 差一整个数(2.5/2.7)
  6. do…while 结尾漏分号(2.5)
  7. void 想接结果——void 不交货(2.6)
  8. 越界访问——5 个格子最大编号 4,arr[5] 运行时炸(2.7)
💡 与第一章名坑的关系

第一章的坑是"环境/工具"层(.java.txt、GBK 编码、cmd 没重开);第二章的坑全是"逻辑"层——编译器越来越帮不上忙,程序能跑但结果不对才是真正的考验。

5. 毕业自检 5 题

❓ Q1:`int a = 7, b = 2;` 打印 `a / b`、`a % b`、`"和:" + a + b` 各是什么?

a / b = 3(整数除法砍小数);a % b = 1(7÷2 余 1);"和:" + a + b = "和:72"(从左到右拼接)。想算加法必须 "和:" + (a + b)。

❓ Q2:for、while、do…while 各自最擅长什么场景?各举一例。

for:知道圈数(打印 1~100);while:不知道圈数(直到输对为止);do…while:必须先做一次(先显示菜单再问选择,至少跑一次)。

❓ Q3:`sum` 写在循环里和写在循环外,求和结果分别是什么?为什么?

循环外:累加器正常累加,得正确总和;循环内:每圈被重置回 0,最后只留最后一圈的值(如 sum=0 写在循环体内,最终 sum 就是最后一个元素,不是总和)。作用域 + 生命周期的实战。

❓ Q4:方法定义时"两个必须配对"指什么?各举一个违反的例子。

① 返回值类型 ↔ return:声明 int 却 return 3.5 或某分支漏 return → 编译错;② 参数列表 ↔ 实参:定义 add(int a, int b) 却调 add(3) 或 add(3, 5.0) → 编译错。

❓ Q5(毕业大题):不看笔记,写一个方法 `stat(int[] scores)`:用循环求总分和最高分,并打印"总分、平均分、最高分"。写完它,回头对照 Demo08。

骨架:public static void stat(int[] scores) { int sum = scores[0]; int max = scores[0]; for (int i = 1; ...) { sum += scores[i]; if (...) max = ...; } 打印 sum、sum/(double)scores.length、max }——注意平均分要 (double) 强转,否则整数除法砍小数(2.3 的伏笔在这里收网)。

📝 Q5 是本章毕业标准(知识地图里那条绿线)

这一题串起变量、累加器、循环边界、擂台算法、方法定义、类型转换——写得出来,第二章就真的毕业了。写不出来也别慌,翻回对应小节看完再写一遍,直到能独立默出。


6. 下一步学什么


7. 相关笔记