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