Files
java/readme.md
2025-12-29 23:41:10 +08:00

112 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

这份笔记为你梳理了 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 等后端框架非常有帮助。要试试吗?**