创建日期:2026-09-08 | 最近更新:2026-09-08 主线 JDK 11(本机实测可跑);「需更高 JDK」处为 14+ / 17+ 特性,不实测。
Java 复习手册 1:基础语法与流程控制
上一篇跑通 HelloWorld 后,这篇把「写代码的日常零件」过一遍。目标:看完能读懂大部分普通 Java 代码。
1. 基本类型:Java 的值类型(8 个,记住常用的 4 个)
| 类型 | 占位 | 例 | 说明 |
|---|---|---|---|
int | 整数 | int age = 30 | 整数默认类型 |
long | 大整数 | long id = 99_000_000L | 字面量加 L |
double | 小数 | double pi = 3.14 | 小数默认类型 |
boolean | 真假 | boolean ok = true | 只有 true/false |
char | 单字符 | char c = 'A' | 单引号,只能一个字符 |
byte/short/float | 少用 | — | float 字面量加 f |
最容易忘:
- 整数除法会截断:
7 / 2是3不是 3.5;想要小数写7.0 / 2或(double) 7 / 2; - 类型自动转换是「小→大」,反之要强转:
(int) 3.9→ 3(直接砍掉小数); - 下划线只是给人看的:
1_000_000就是 1000000。
2. String:引用类型但天天用
String a = "hello";
String b = "hello";
System.out.println(a == b); // true ? —— 危险!别用 == 比内容
System.out.println(a.equals(b)); // true ✔ 字符串比内容永远用 equals
System.out.println(a.length()); // 5
System.out.println(a.toUpperCase()); // HELLO(返回新串,原串不变)
System.out.println(a + " world"); // 字符串拼接用 +
System.out.println(String.format("值=%d", 42)); // 格式化 %d整数 %s字符串 %f小数
最容易忘的「== vs equals」:== 比较的是引用地址,String 内容要用 .equals()。这是几乎所有新手的第一个大坑。字符串一旦创建不可变,所以拼接很多次效率低 → 需要循环拼接用 StringBuilder(在篇 4 讲)。
3. 运算符速查(只列反直觉的)
int a = 7, b = 2;
a % b; // 1 取余
a++; // a = a + 1(同理 --)
a += 3; // a = a + 3(+= -= *= /= %= 都有)
boolean x = true, y = false;
x && y; // 短路与 || 短路或 !x 取反
int max = a > b ? a : b; // 三元,等于 if/else 的表达式版
比较与逻辑:Java 的 &&/||/! 和多数语言一致;唯一注意:字符串比较别用 ==(见上)。
4. if / switch / 循环
// if - else if - else
int score = 85;
if (score >= 90) {
System.out.println("A");
} else if (score >= 60) {
System.out.println("B");
} else {
System.out.println("C");
}
// switch(JDK 14+ 的箭头写法更简洁,见下)
switch (score / 10) {
case 9: System.out.println("优秀"); break;
case 8: System.out.println("良好"); break;
default: System.out.println("加油"); break; // default 兜底
}
// for(三步:初值;条件;步进)
for (int i = 0; i < 5; i++) {
System.out.println(i);
}
// while(先判断后执行)
int n = 0;
while (n < 3) { System.out.println(n); n++; }
// do-while(先执行一次再判断,少用)
JDK 14+ 的 switch 新写法(case ->,不用 break):
switch (score / 10) {
case 9, 10 -> System.out.println("优秀");
case 7, 8 -> System.out.println("良好");
default -> System.out.println("加油");
}
5. 数组
// 声明 + 创建 + 赋值
int[] nums = new int[3]; // [0,0,0]
nums[0] = 10;
int[] arr = {1, 2, 3}; // 直接初始化,长度固定不可变
System.out.println(arr.length); // 3 ← length 是属性不是方法,没括号!
System.out.println(arr[0]); // 1
// 遍历:普通 for
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
// 遍历:增强 for(只读用,最省心)
for (int v : arr) {
System.out.println(v);
}
最容易忘:
数组.length没有括号(字符串的length()有),混了就报错;- 数组越界会抛异常
ArrayIndexOutOfBoundsException(篇 4 讲异常); - 数组长度固定,要动态增删用
ArrayList(篇 4 集合)。
6. 把最常忘的浓缩成一张卡
| 场景 | 正确写法 |
|---|---|
| 字符串比较内容 | s1.equals(s2),别 == |
| 整数除出小数 | (double) a / b |
| 数组长度 | arr.length(无括号) |
| 字符串长度 | str.length()(有括号) |
| 单字符 | 'A' 单引号;字符串 "A" 双引号 |
| 大整数/小数后缀 | long 加 L,float 加 f |
动手 3 分钟
写一个程序:打印 1 到 100 里所有能被 3 整除的数之和。
自测
7 / 2等于几?怎么得到 3.5?- 为什么
"ab" == "ab"可能是 true 也可能是 false?判断内容该用什么? arr.length和str.length()为什么一个有括号一个没有?- switch 老写法里
break忘了会怎样? - 增强 for 适合什么时候用、不适合什么时候用?