Jelajahi Sumber

docs: 追加 Demo05/Demo06 内容到课堂笔记

- 新增「基本数据类型转换」小节(自动/强制转换 + 二进制过程)
- 新增「表达式提升与编码表」小节(表达式提升/除法截断/ASCII/字符集)
- 完整代码示例新增 Demo05.java 和 Demo06.java
- 随堂练习要点新增 6 条(第 12~17 条)
WanJL 1 hari lalu
induk
melakukan
f757b18263
1 mengubah file dengan 207 tambahan dan 0 penghapusan
  1. 207 0
      课堂笔记/01-JavaSE基础-笔记/20260713-笔记.md

+ 207 - 0
课堂笔记/01-JavaSE基础-笔记/20260713-笔记.md

@@ -194,6 +194,126 @@ String name = "张三";
 System.out.println("我叫:" + name);
 System.out.println("我叫:" + name);
 ```
 ```
 
 
+### 5. 基本数据类型转换
+
+> 数值类型(除 `boolean` 外)之间可以相互转换,分为**自动转换**和**强制转换**两种。
+
+#### 自动转换(隐式转换 / Widening)
+
+把表示范围**小**的类型的变量,直接赋值给表示范围**大**的类型的变量,可以自动完成。
+
+**转换方向**(箭头方向为自动转换方向):
+
+```
+byte → short → int → long → float → double
+```
+
+> 就像把一瓶 500ml 的水倒进一个 1L 的瓶子里,完全装得下。
+
+```java
+byte  a = 120;
+short b = a;   // byte → short(自动)
+int   c = b;   // short → int(自动)
+long  d = c;   // int → long(自动)
+float f = d;   // long → float(自动)
+double dd = f; // float → double(自动)
+```
+
+#### 强制转换(显式转换 / Narrowing)
+
+把表示范围**大**的类型的值,赋值给表示范围**小**的类型的变量,需要使用**强制转换运算符**。
+
+**语法格式:**
+
+```java
+目标类型 变量名2 = (目标类型) 变量1;
+```
+
+> 强制转换可能丢失精度,分两种情况:
+> - 能装得下:1L 瓶里有 300ml 水 → 倒进 500ml 的瓶子 ✅
+> - 装不下:1L 瓶里有 600ml 水 → 倒进 500ml 的瓶子 ❌(数据溢出)
+
+```java
+// 示例 1:double → int(小数截断,不是四舍五入)
+double pi = 3.94;
+int n = (int) pi;       // n 的值是 3,丢失了小数部分
+System.out.println(n);
+
+// 示例 2:int → byte(数据溢出)
+int n2 = 128;
+byte b2 = (byte) n2;    // byte 最大值是 127,128 会溢出
+System.out.println(b2); // 输出 -128
+```
+
+**int 128 → byte 的转换过程:**
+
+```
+1. int 的 128(十进制)→ 32 位二进制:
+   0000 0000 0000 0000 0000 0000 1000 0000
+
+2. 转换为 byte(8 位),直接砍掉高位(左边 24 位):
+   1000 0000
+
+3. 二进制中,最左边是符号位:
+   0 → 正数,1 → 负数
+   所以 1000 0000 对应十进制 -128
+```
+
+### 6. 表达式提升与编码表
+
+#### 表达式提升
+
+`byte`、`short`、`char` 参与算术运算时,会自动提升为 `int` 类型。
+
+```java
+byte a = 15;
+short b = 20;
+
+// byte c1 = a + b;   // ❌ 编译错误:a + b 结果是 int
+// short c2 = a + b;  // ❌ 编译错误:a + b 结果是 int
+int c3 = a + b;        // ✅ 正确
+```
+
+#### 整数除法截断
+
+两个整数相除,结果直接截断小数部分,**不会四舍五入**。
+
+```java
+System.out.println(10 / 3);    // 输出 3(截断小数)
+System.out.println(10 / 3.0);  // 输出 3.3333333333333335(浮点数除法)
+```
+
+#### char 与 int 的关系
+
+`char` 本质上是数值类型,可以与 `int` 相互转换:
+
+```java
+char cc = 'A';
+int d1 = cc + 6;        // 'A' 的 ASCII 码是 65,65 + 6 = 71
+System.out.println(d1);  // 输出 71
+
+char c6 = 97;            // 直接为 char 赋整数值
+System.out.println(c6);  // 输出 'a'(97 对应 ASCII 表的 'a')
+```
+
+> Java 中 8 种基本数据类型除了 `boolean`,其余 7 种都属于**数值类型**,都可以转换为数字。
+
+#### 编码与解码
+
+| 概念 | 方向 | 说明 |
+|------|------|------|
+| **编码** | 字符 → 二进制数 | 把人类可读的字符转换为计算机能识别的二进制 |
+| **解码** | 二进制数 → 字符 | 把二进制转换回人类可读的字符 |
+
+#### 常见编码表(字符集)
+
+| 编码表 | 说明 |
+|--------|------|
+| **ASCII** | 美国标准信息交换码,使用 1 字节(7 位实际有效),共 128 个字符 |
+| **GB-2312 / GBK** | 中国国家标准简体中文字符集 |
+| **Unicode** | 通用字符编码标准,使用 2 字节,可表示 65536 个字符 |
+| **UTF-8** | Unicode 的一种变长编码实现,互联网最常用的字符集(中国大陆常用编码) |
+
 ---
 ---
 
 
 ## 五、输出语句
 ## 五、输出语句
@@ -353,6 +473,87 @@ public class Demo04 {
 }
 }
 ```
 ```
 
 
+### Demo05.java — 基本数据类型转换
+
+```java
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Demo05
+ * @description 基本数据类型的转换
+ * @create 2026/7/13
+ */
+public class Demo05 {
+    public static void main(String[] args) {
+        // ========== 自动转换 ==========
+        // 小范围 → 大范围,自动完成
+        byte a = 120;
+        short b = a;    // byte → short
+        int c = b;      // short → int
+        long d = c;     // int → long
+        float f = d;    // long → float
+        double dd = f;  // float → double
+
+        // ========== 强制转换 ==========
+        // 大范围 → 小范围,需要强制转换运算符,可能丢失精度
+
+        // 示例 1:double → int(小数截断)
+        double pi = 3.94;
+        int n = (int) pi;   // double → int
+        System.out.println(n);  // 3(直接截断小数,不是四舍五入)
+
+        // 示例 2:int → byte(数据溢出)
+        int n2 = 128;
+        byte b2 = (byte) n2;    // int → byte,byte 最大值 127
+        System.out.println(b2); // -128(溢出导致)
+        /*
+            转换过程:
+            1. int 128 → 32位二进制:
+               0000 0000 0000 0000 0000 0000 1000 0000
+            2. 截取低8位 → byte:
+               1000 0000(最左边是符号位,1 表示负数)
+            3. 1000 0000 二进制 → 十进制 -128
+         */
+    }
+}
+```
+
+### Demo06.java — 表达式提升与编码表
+
+```java
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Demo06
+ * @description 表达式提升
+ * @create 2026/7/13
+ */
+public class Demo06 {
+    public static void main(String[] args) {
+        // ========== 表达式提升 ==========
+        // byte/short/char 参与运算时自动提升为 int
+        byte a = 15;
+        short b = 20;
+        // byte c1 = a + b;    // ❌ 编译错误
+        // short c2 = a + b;   // ❌ 编译错误
+        int c3 = a + b;        // ✅ 正确
+
+        // ========== 整数除法截断 ==========
+        System.out.println(10 / 3);    // 3(截断)
+        System.out.println(10 / 3.0);  // 3.3333...
+
+        // ========== char 与 int 转换 ==========
+        char cc = 'A';
+        int d1 = cc + 6;   // 'A'的ASCII码65 + 6 = 71
+        System.out.println(d1);  // 71
+
+        // 直接为 char 赋整数值
+        char c6 = 97;
+        System.out.println(c6);  // 'a'
+    }
+}
+```
+
 ---
 ---
 
 
 ## 九、随堂练习要点
 ## 九、随堂练习要点
@@ -368,6 +569,12 @@ public class Demo04 {
 9. 理解 bit(位)与 byte(字节)的关系及存储单位换算
 9. 理解 bit(位)与 byte(字节)的关系及存储单位换算
 10. 记住 `String` 是引用数据类型,**不是关键字**,采用大驼峰命名
 10. 记住 `String` 是引用数据类型,**不是关键字**,采用大驼峰命名
 11. **个人简历练习**:为姓名、年龄、学号、性别、身高、体重、学校、专业、班级、爱好选择合适的数据类型并输出
 11. **个人简历练习**:为姓名、年龄、学号、性别、身高、体重、学校、专业、班级、爱好选择合适的数据类型并输出
+12. 掌握**自动转换**方向:`byte → short → int → long → float → double`
+13. 掌握**强制转换**语法:`(目标类型) 变量`,理解精度丢失和溢出
+14. `byte`、`short`、`char` 参与运算自动提升为 `int`
+15. 整数除法结果直接**截断小数**,不是四舍五入
+16. `char` 本质是数值类型,可查询 **ASCII 码表** 与 `int` 相互转换
+17. 区分**编码**(字符→二进制)与**解码**(二进制→字符),了解常见字符集(ASCII、GBK、Unicode、UTF-8)
 
 
 ---
 ---