This commit is contained in:
e2hang
2025-12-29 23:41:10 +08:00
commit b76abae679
2 changed files with 375 additions and 0 deletions

112
readme.md Normal file
View File

@@ -0,0 +1,112 @@
这份笔记为你梳理了 Java 开发中最核心的语法和类型体系。你可以把它当作一张“速查表”,重点标注了和 C/C++ 的差异点。
---
## 1. Java 数据类型大地图
Java 的类型系统分为两大类:**基本类型**和**引用类型**。
### ① 基本类型 (Primitive Types)
Java 的基本类型长度是**固定**的,不随操作系统位数改变(这是跨平台的保证)。
| 类型 | 大小 | 默认值 | 包装类 (用于集合) | 备注 |
| --- | --- | --- | --- | --- |
| **byte** | 1 byte | 0 | Byte | 很少用,多用于二进制流 |
| **short** | 2 bytes | 0 | Short | - |
| **int** | 4 bytes | 0 | **Integer** | 最常用 |
| **long** | 8 bytes | 0L | Long | 赋值需加 `L` 后缀 |
| **float** | 4 bytes | 0.0f | Float | 赋值需加 `f` 后缀 |
| **double** | 8 bytes | 0.0 | Double | 常用浮点数 |
| **char** | 2 bytes | '\u0000' | Character | **UTF-16 编码**,存一个汉字没问题 |
| **boolean** | 1 bit | false | Boolean | 只有 `true/false`,不能用 0/1 |
### ② 引用类型 (Reference Types)
除了上面 8 种,剩下的全是引用类型(类似于 C 的指针,但你不能直接操作内存地址)。
* **类 (Class)**:如 `String`, `User`
* **接口 (Interface)**:如 `List`
* **数组 (Array)**:如 `int[]`, `User[]`
---
## 2. 核心语法速记
### ① 变量与常量
```java
int age = 18; // 变量
final double PI = 3.1415; // 常量 (类似 C++ 的 const)
```
### ② 运算符 (与 C 几乎一致)
* 算术:`+`, `-`, `*`, `/`, `%`, `++`, `--`
* 关系:`==`, `!=`, `>`, `<`, `>=`, `<=`
* 逻辑:`&&` (短路与), `||` (短路或), `!`
* **特殊**`+` 可以用于字符串拼接,如 `"Age: " + age`
### ③ 条件与循环
```java
// 条件
if (score > 60) { ... } else { ... }
// 循环 (和 C 没区别)
for (int i = 0; i < 10; i++) { ... }
while (condition) { ... }
// 增强型 for (专门遍历集合和数组)
for (String name : nameList) {
System.out.println(name);
}
```
---
## 3. 面向对象三要素 (封装、继承、多态)
* **封装**:使用 `private` 隐藏属性,通过 `public``getter/setter` 方法暴露。
* **继承**:使用 `extends` 关键字。Java 是**单继承**,一个儿子只能有一个亲爹。
* **多态**:父类引用指向子类对象 `List list = new ArrayList();`(这是后端开发的灵魂)。
---
## 4. Java 集合框架 (STL 对应版)
`java.util` 包下,这是做服务器开发最常用的工具:
| 功能 | Java 接口 | 常用实现类 | C++ 对应 |
| --- | --- | --- | --- |
| **动态数组** | `List` | `ArrayList` | `std::vector` |
| **链表** | `List` | `LinkedList` | `std::list` |
| **哈希表** | `Map` | **`HashMap`** | `std::unordered_map` |
| **排序映射** | `Map` | `TreeMap` | `std::map` |
| **唯一集合** | `Set` | `HashSet` | `std::unordered_set` |
---
## 5. 两个“必须知道”的避坑指南
### 🔴 避坑 1字符串比较
* **错误**`if (str == "hello")` (这是在比较内存地址)
* **正确**`if (str.equals("hello"))` (这是在比较内容)
### 🔴 避坑 2自动装箱与拆箱
Java 集合不能直接存基本类型(如 `int`),必须存包装类(`Integer`)。
```java
ArrayList<Integer> list = new ArrayList<>();
list.add(10); // 自动装箱:把 int 变成 Integer 对象
int val = list.get(0); // 自动拆箱:把 Integer 变成 int
```
---
**这份笔记你可以先存着。如果你想练习,我可以给你一个涉及到“继承和多态”的小案例,这对于理解 Spring 等后端框架非常有帮助。要试试吗?**