|
|
@@ -567,7 +567,159 @@ public class Demo08 {
|
|
|
|
|
|
---
|
|
|
|
|
|
-## 三、课后作业讲解(7月14日作业)
|
|
|
+## 三、数组(Array)
|
|
|
+
|
|
|
+### 1. 数组概述
|
|
|
+
|
|
|
+**数组**是一种用来存储多个相同类型数据的容器。
|
|
|
+
|
|
|
+#### Java 数据类型回顾
|
|
|
+
|
|
|
+Java 中的数据类型分为两类:
|
|
|
+| 类型 | 说明 |
|
|
|
+|------|------|
|
|
|
+| **基本数据类型** | byte、short、int、long、float、double、char、boolean |
|
|
|
+| **引用数据类型** | 类(class)、**数组([])**、接口(interface)、枚举(enum)、注解(@interface) |
|
|
|
+
|
|
|
+> 之前学过的 `String` 就是引用数据类型(类),现在学习的**数组**也是引用数据类型。
|
|
|
+
|
|
|
+#### 数组的特点
|
|
|
+
|
|
|
+| 特点 | 说明 |
|
|
|
+|------|------|
|
|
|
+| ① 连续存储 | 数组中的每个元素(值)存储在连续的内存空间中 |
|
|
|
+| ② 通过索引访问 | 使用索引值(下标)来访问数组中的元素 |
|
|
|
+| ③ 固定长度 | 数组有一个 `length` 属性,表示数组的长度,创建后不能改变 |
|
|
|
+| ④ 同类型 | 数组中只能存储同一种类型的元素 |
|
|
|
+| ⑤ 指定类型 | 创建数组时必须指定要存储的元素类型 |
|
|
|
+| ⑥ 索引从 0 开始 | 第一个元素的索引为 `0`,最后一个元素的索引为 `length - 1` |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 2. 定义数组的格式
|
|
|
+
|
|
|
+```java
|
|
|
+数据类型[] 数组名;
|
|
|
+```
|
|
|
+
|
|
|
+示例:
|
|
|
+```java
|
|
|
+int[] a; // 声明一个 int 类型的数组变量 a
|
|
|
+```
|
|
|
+
|
|
|
+> `int[] a` 表示 `a` 是一个 int 类型的数组变量,为它赋值时对应的数组必须是整数类型。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 3. 数组的初始化
|
|
|
+
|
|
|
+数组的初始化分为两种方式:**动态初始化** 和 **静态初始化**。
|
|
|
+
|
|
|
+#### ① 动态初始化
|
|
|
+
|
|
|
+程序员负责**定义数组长度**,计算机负责**为数组元素赋默认值**。
|
|
|
+
|
|
|
+```java
|
|
|
+// 语法:数组变量名 = new 数组类型[数组长度];
|
|
|
+int[] a = new int[10];
|
|
|
+```
|
|
|
+
|
|
|
+**各类型元素的默认值:**
|
|
|
+| 元素类型 | 默认值 |
|
|
|
+|---------|-------|
|
|
|
+| `byte`、`short`、`int`、`long` | `0` |
|
|
|
+| `float`、`double` | `0.0` |
|
|
|
+| `char` | ` `(空字符) |
|
|
|
+| `boolean` | `false` |
|
|
|
+| 引用数据类型 | `null` |
|
|
|
+
|
|
|
+#### 数组在内存中的地址
|
|
|
+
|
|
|
+```java
|
|
|
+int[] a = new int[10];
|
|
|
+System.out.println(a); // 输出类似:[I@b4c966a
|
|
|
+```
|
|
|
+
|
|
|
+> 地址值含义:
|
|
|
+> - `[` — 表示这是一个一维数组
|
|
|
+> - `I` — 表示元素类型为 int
|
|
|
+> - `@` — 分隔符
|
|
|
+> - `b4c966a` — 数组在堆内存中的地址值(十六进制)
|
|
|
+
|
|
|
+#### ② 静态初始化
|
|
|
+
|
|
|
+程序员负责**为数组元素赋值**,计算机负责**计算数组的长度**。
|
|
|
+
|
|
|
+**完整语法:**
|
|
|
+```java
|
|
|
+int[] arr1 = new int[]{1, 3, 5, 7, 9, 6, 2, 4};
|
|
|
+```
|
|
|
+
|
|
|
+**简写语法(最常用):**
|
|
|
+```java
|
|
|
+int[] arr2 = {1, 3, 5, 7, 9, 6, 2, 4};
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 4. 数组元素的访问与赋值
|
|
|
+
|
|
|
+#### 为数组元素赋值
|
|
|
+
|
|
|
+```java
|
|
|
+数组名[索引值] = 值;
|
|
|
+
|
|
|
+// 示例
|
|
|
+arr[0] = 1; // 直接赋一个字面量
|
|
|
+int x = 15;
|
|
|
+arr[1] = x; // 赋一个变量的值
|
|
|
+```
|
|
|
+
|
|
|
+#### 访问(读取)数组元素
|
|
|
+
|
|
|
+```java
|
|
|
+数组名[索引值]
|
|
|
+
|
|
|
+// 示例
|
|
|
+System.out.println(arr[0]); // 输出第一个元素(已被赋值为 1)
|
|
|
+System.out.println(arr[1]); // 输出第二个元素(已被赋值为 15)
|
|
|
+System.out.println(arr[2]); // 输出第三个元素(未赋值,输出默认值 0)
|
|
|
+```
|
|
|
+
|
|
|
+#### 使用 for 循环遍历数组
|
|
|
+
|
|
|
+```java
|
|
|
+for (int i = 0; i < arr.length; i++) {
|
|
|
+ System.out.println(arr[i]);
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+> `arr.length` — 获取数组的长度(元素个数)
|
|
|
+
|
|
|
+#### 索引越界风险
|
|
|
+
|
|
|
+```java
|
|
|
+int[] arr = new int[5];
|
|
|
+System.out.println(arr[5]); // ❌ 索引越界!ArrayIndexOutOfBoundsException
|
|
|
+// 索引范围:0 ~ length-1,即 0 ~ 4
|
|
|
+```
|
|
|
+
|
|
|
+> ⚠️ 访问数组元素时,索引值必须在 **0 ~ length-1** 之间,否则会抛出 `ArrayIndexOutOfBoundsException`(数组下标索引异常)。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 5. 数组初始化方式对比
|
|
|
+
|
|
|
+| 特性 | 动态初始化 | 静态初始化 |
|
|
|
+|------|-----------|-----------|
|
|
|
+| **谁指定长度** | 程序员 | 计算机(根据元素个数自动计算) |
|
|
|
+| **谁赋值** | 计算机(默认值) | 程序员(手动指定) |
|
|
|
+| **语法** | `new int[10]` | `new int[]{1,2,3}` 或 `{1,2,3}` |
|
|
|
+| **适用场景** | 暂时不知道元素的具体值 | 已知元素的具体值 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 四、课后作业讲解(7月14日作业)
|
|
|
|
|
|
### 题目 1:判断闰年
|
|
|
|
|
|
@@ -783,7 +935,7 @@ a = a - b; // a 得到原 b 的值
|
|
|
|
|
|
---
|
|
|
|
|
|
-## 四、知识拓展
|
|
|
+## 五、知识拓展
|
|
|
|
|
|
### 1. break 在 switch 中的作用
|
|
|
|
|
|
@@ -842,7 +994,7 @@ int hex = 0xC; // 十六进制 → 12
|
|
|
|
|
|
---
|
|
|
|
|
|
-## 五、完整代码汇总
|
|
|
+## 六、完整代码汇总
|
|
|
|
|
|
### Demo01.java — switch 分支语句
|
|
|
|
|
|
@@ -1198,9 +1350,55 @@ public class Demo08 {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
+### Demo09.java — 数组(Array)
|
|
|
+
|
|
|
+```java
|
|
|
+/**
|
|
|
+ * @author WanJl
|
|
|
+ * @version 1.0
|
|
|
+ * @title Demo09
|
|
|
+ * @description java引用数据类型
|
|
|
+ * @create 2026/7/15
|
|
|
+ */
|
|
|
+public class Demo09 {
|
|
|
+ public static void main(String[] args) {
|
|
|
+ // ===== 声明数组变量 =====
|
|
|
+ int[] a; // int类型的数组变量
|
|
|
+
|
|
|
+ // ===== 动态初始化 =====
|
|
|
+ a = new int[10];
|
|
|
+ System.out.println(a); // 输出数组在堆内存中的地址值
|
|
|
+
|
|
|
+ // ===== 直接声明并动态初始化 =====
|
|
|
+ int[] arr = new int[10];
|
|
|
+
|
|
|
+ // ===== 为数组元素赋值 =====
|
|
|
+ arr[0] = 1;
|
|
|
+ int x = 15;
|
|
|
+ arr[1] = x;
|
|
|
+
|
|
|
+ // ===== 访问数组元素 =====
|
|
|
+ System.out.println(arr[0]); // 1
|
|
|
+ System.out.println(arr[1]); // 15
|
|
|
+ System.out.println(arr[2]); // 0(默认值)
|
|
|
+
|
|
|
+ // ===== 使用 for 循环遍历数组 =====
|
|
|
+ for (int i = 0; i < arr.length; i++) {
|
|
|
+ System.out.println(arr[i]);
|
|
|
+ }
|
|
|
+
|
|
|
+ // ===== 静态初始化(完整写法) =====
|
|
|
+ int[] arr1 = new int[]{1, 3, 5, 7, 9, 6, 2, 4};
|
|
|
+
|
|
|
+ // ===== 静态初始化(简写方式,最常用) =====
|
|
|
+ int[] arr2 = {1, 3, 5, 7, 9, 6, 2, 4};
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
---
|
|
|
|
|
|
-## 六、随堂练习要点
|
|
|
+## 七、随堂练习要点
|
|
|
|
|
|
1. **switch 基本语法**:`switch(变量) { case 常量: 代码块; break; ... default: }`
|
|
|
2. **break 的作用**:跳出 switch 结构,防止穿透(fall-through)
|
|
|
@@ -1239,10 +1437,17 @@ public class Demo08 {
|
|
|
35. **打印矩形**:所有位置都输出 `*`
|
|
|
36. **打印空心矩形**:首行/末行全 `*`,中间行首列/末列 `*`,其余空格
|
|
|
37. **打印菱形**:根据行号决定每行星号的排列位置
|
|
|
+38. **数组**:用来存储多个相同类型数据的容器,是引用数据类型
|
|
|
+39. **数组六要素**:连续存储、索引访问、固定长度、同类型、指定类型、索引从0开始
|
|
|
+40. **数组 length 属性**:`数组名.length` 获取数组长度,创建后不可改变
|
|
|
+41. **动态初始化**:程序员定义长度,计算机赋默认值,如 `new int[10]`
|
|
|
+42. **静态初始化**:程序员赋值,计算机算长度,如 `{1,3,5,7,9}`
|
|
|
+43. **数组遍历**:使用 `for` 循环配合 `arr.length` 遍历所有元素
|
|
|
+44. **索引越界异常**:访问 `0 ~ length-1` 范围外的索引会抛出 `ArrayIndexOutOfBoundsException`
|
|
|
|
|
|
---
|
|
|
|
|
|
-## 七、拓展阅读
|
|
|
+## 八、拓展阅读
|
|
|
|
|
|
| 概念 | 说明 |
|
|
|
|------|------|
|
|
|
@@ -1266,3 +1471,10 @@ public class Demo08 {
|
|
|
| **嵌套循环** | 循环中嵌套循环,外层每轮内层完整执行一次,总次数 = 外层 × 内层 |
|
|
|
| **数字拆位** | `n % 10` 取个位,`n / 10` 去掉个位,`while` 循环可逐位取出所有数字 |
|
|
|
| **图形打印** | 外层行、内层列、if 判断输出 `*` 或空格,是嵌套循环的经典二维应用 |
|
|
|
+| **数组(Array)** | 引用数据类型,用于存储多个相同类型元素的容器 |
|
|
|
+| **动态初始化** | `new int[10]`,程序员指定长度,计算机赋默认值 |
|
|
|
+| **静态初始化** | `{1,2,3}`,程序员赋值,计算机计算长度 |
|
|
|
+| **数组遍历** | 使用 `for` + `arr.length` 逐一访问每个元素 |
|
|
|
+| **length 属性** | 数组的固有属性,表示数组的长度,创建后不可修改 |
|
|
|
+| **索引越界** | 访问 `0 ~ length-1` 范围外的索引抛出 `ArrayIndexOutOfBoundsException` |
|
|
|
+| **数组默认值** | int→0、double→0.0、char→'
|