Просмотр исходного кода

feat: 新增Demo09数组(Array)引用数据类型,更新课堂笔记

- 新增 Demo09.java(数组声明、动态/静态初始化、元素访问、遍历)
- 更新笔记:新增第三章 数组(Array)完整讲解
- 更新笔记:完整代码汇总追加Demo09.java
- 更新笔记:随堂练习要点追加数组知识点(第38~44条)
- 更新笔记:拓展阅读追加数组相关术语
WanJL 1 день назад
Родитель
Сommit
c5d412e9f2

+ 85 - 0
授课代码/c260715/src/Demo09.java

@@ -0,0 +1,85 @@
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Demo09
+ * @description java引用数据类型
+ * @create 2026/7/15
+ */
+public class Demo09 {
+    /*
+        Java中的数据类型分为两类:
+            基本数据类型
+            引用数据类型
+                |- 类 所有使用class修饰的,都是类
+                |- 数组 是一种用来存储多个数据的容器
+           数组是用来存储多个相同类型的值的容器。
+           数组的特点:
+            1、是连续存储,数组中的每个值,称为数组的元素,所有元素都是存储在连续的内存空间中,通过索引值来访问。
+            2、Java数组有一个属性:length 表示数组的长度
+            3、数组创建的时候必须要指定数组的类型,数组里面要存什么类型的元素。
+            4、数组中只能存储同一种类型的元素。
+            5、数组的长度一旦确定,就不能改变
+            6、数组的索引值(下标)从0开始,对应第一个元素,到 length-1 为止,对应最后一个元素
+           定义数组的格式:
+            数据类型 [] 数组名(变量名);
+     */
+    public static void main(String[] args) {
+        //数据类型 [] 数组名(变量名);
+        //声明数组变量
+        int[] a;    //这是一个int类型的数组变量,为它赋值的地址对应的数组必须是整数类型
+        //对数组变量进行初始化赋值
+        //【动态初始化】赋值,格式: 数组变量名=new 数组类型[数组长度];
+        a=new int[10];
+        System.out.println(a);  //输出a,就会输出 这个数组在堆内存中的地址值
+        /*
+            比如地址值: [I@b4c966a
+                [   表示这是一个一维数组
+                I   表示这是一个int类型的数组
+                @   分隔符
+                b4c966a 是这个数组在堆内存中的地址值
+         */
+        // 所谓的动态初始化,就是先定义了数组的长度,并且为数组的空间每个元素都赋值初始值。
+        // 初始值 就是 数组类型的默认值,比如整数默认值:0、小数默认值:0.0、char类型的默认值 是空字符 \u0000、布尔类型的默认值是 false
+        //我们可以直接声明数组并且进行动态初始化赋值
+        int[] arr=new int[10];
+        //粗暴的理解:动态初始化就是 程序员负责定义数组长度,计算机负责为数组元素赋值。
+
+        /*
+            为数组中的某个元素赋值--格式:
+            数组名[索引值]=变量(字面量);
+         */
+        arr[0]=1;
+        int x=15;
+        arr[1]=x;
+        //访问(使用/输出)数组元素:
+        // 数组名[索引值]
+        System.out.println(arr[0]); //第一个元素,被赋值为1 ,所以输出就是1
+        System.out.println(arr[1]);//第二个也一样
+        System.out.println(arr[2]); //第三个元素因为没有赋值,所以输出就是0
+
+        //我们可以使用循环来快速的遍历整个数组的所有元素
+        // 数组名.length 就可以获取这个数组的长度
+        for (int i = 0; i < arr.length; i++) {
+            //数组名[索引值]
+            System.out.println(arr[i]);
+        }
+        //
+        /*
+            【静态初始化】
+            数组数据类型[] 数组名=new 数组数据类型[]{数组元素1,数组元素2,....,数组元素n};
+            静态初始化是程序员负责为数组元素赋值,计算机负责计算数组的长度。
+            简写方式:
+            数组数据类型[] 数组名={数组元素1,数组元素2,....,数组元素n};
+         */
+        //数组数据类型[] 数组名=new 数组数据类型[]{数组元素1,数组元素2,....,数组元素n};
+        int[] arr1=new int[]{1,3,5,7,9,6,2,4};
+        //简写方式:数组数据类型[] 数组名={数组元素1,数组元素2,....,数组元素n};
+        int[] arr2={1,3,5,7,9,6,2,4};   //这种是最常用的方式
+
+        /*
+            注意:
+                访问数组元素使用的是 数组名[索引值]
+                但是注意索引值 必须是0~长度-1之间,否则会出现异常 数组下标索引异常
+         */
+    }
+}

+ 217 - 5
课堂笔记/01-JavaSE基础-笔记/20260715-笔记.md

@@ -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→''、boolean→false、引用类型→null |