跳到主要内容

创建日期: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 / 23 不是 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" 双引号
大整数/小数后缀longLfloatf

动手 3 分钟

写一个程序:打印 1 到 100 里所有能被 3 整除的数之和。

自测

  1. 7 / 2 等于几?怎么得到 3.5?
  2. 为什么 "ab" == "ab" 可能是 true 也可能是 false?判断内容该用什么?
  3. arr.lengthstr.length() 为什么一个有括号一个没有?
  4. switch 老写法里 break 忘了会怎样?
  5. 增强 for 适合什么时候用、不适合什么时候用?