Browse Source

docs: 更新20260727课堂笔记,同步代码变更——新增String API(内存模型/构造方法/==与equals/常用方法)、匿名内部类继承普通类、抽象类匿名内部类、Calculator计算器接口多实现等综合案例;更新README包路径

WanJL 17 hours ago
parent
commit
60854e0750
25 changed files with 385 additions and 5 deletions
  1. 2 2
      README.md
  2. 0 0
      授课代码/c260727/src/course/anonymousInternalClass/Compute.java
  3. 0 0
      授课代码/c260727/src/course/anonymousInternalClass/Demo01.java
  4. 0 0
      授课代码/c260727/src/course/anonymousInternalClass/NoteBook.java
  5. 0 0
      授课代码/c260727/src/course/anonymousInternalClass/Person.java
  6. 0 0
      授课代码/c260727/src/course/anonymousInternalClass/Sort.java
  7. 0 0
      授课代码/c260727/src/course/anonymousInternalClass/Student.java
  8. 0 0
      授课代码/c260727/src/course/anonymousInternalClass/Tableware.java
  9. 0 0
      授课代码/c260727/src/course/anonymousInternalClass/Test01.java
  10. 0 0
      授课代码/c260727/src/course/anonymousInternalClass/Test02.java
  11. 0 0
      授课代码/c260727/src/course/anonymousInternalClass/Test03.java
  12. 0 0
      授课代码/c260727/src/course/anonymousInternalClass/Usb.java
  13. 0 0
      授课代码/c260727/src/course/anonymousInternalClass/筷子.java
  14. 11 0
      授课代码/c260727/src/course/api/Demo01.java
  15. 11 0
      授课代码/c260727/src/course/api/StringTest.java
  16. 11 0
      授课代码/c260727/src/course/api/StringTest02.java
  17. 11 0
      授课代码/c260727/src/exercise/exercise01/ComputerStudent.java
  18. 11 0
      授课代码/c260727/src/exercise/exercise01/Student.java
  19. 11 0
      授课代码/c260727/src/exercise/exercise01/Test.java
  20. 11 0
      授课代码/c260727/src/exercise/exercise06/EatTest.java
  21. 20 0
      授课代码/c260727/src/exercise/exercise06/Person.java
  22. 13 0
      授课代码/c260727/src/exercise/exercise06/Tableware.java
  23. 11 0
      授课代码/c260727/src/exercise/exercise07/TestAnonymous.java
  24. 11 0
      授课代码/c260727/src/exercise/exercise07/TestCalculator.java
  25. 251 3
      课堂笔记/01-JavaSE基础-笔记/20260727-笔记.md

+ 2 - 2
README.md

@@ -32,7 +32,7 @@
 | 2026-07-22 | [继承:继承概念与格式、方法重写(@Override)、super 关键字、就近原则、继承中构造方法、单继承与多层继承、访问修饰符](./课堂笔记/01-JavaSE基础-笔记/20260722-笔记.md) |
 | 2026-07-22 | [继承:继承概念与格式、方法重写(@Override)、super 关键字、就近原则、继承中构造方法、单继承与多层继承、访问修饰符](./课堂笔记/01-JavaSE基础-笔记/20260722-笔记.md) |
 | 2026-07-23 | [抽象类 + final + 模板方法 + 代码块 + 接口(含JDK8+新特性):抽象类定义与特点、final 类/方法/变量、模板方法模式、三种代码块、接口定义与实现(Usb→LogiMouse/ROGMouse)、接口 vs 抽象类对比、JDK8默认方法static方法、JDK9私有方法](./课堂笔记/01-JavaSE基础-笔记/20260723-笔记.md) |
 | 2026-07-23 | [抽象类 + final + 模板方法 + 代码块 + 接口(含JDK8+新特性):抽象类定义与特点、final 类/方法/变量、模板方法模式、三种代码块、接口定义与实现(Usb→LogiMouse/ROGMouse)、接口 vs 抽象类对比、JDK8默认方法static方法、JDK9私有方法](./课堂笔记/01-JavaSE基础-笔记/20260723-笔记.md) |
 | 2026-07-24 | [多态 + 多态中的转型 + 内部类:多态概念与前提、多态成员访问特点、向上转型/向下转型、instanceof类型判断、多态的好处(开闭原则)、抽象类与多态结合(Animal→Dog;Person→Student/Teacher综合案例)、Usb接口多态案例(NoteBook接入鼠标/猫)、内部类概念与使用场景、成员内部类、私有内部类设计原则](./课堂笔记/01-JavaSE基础-笔记/20260724-笔记.md) |
 | 2026-07-24 | [多态 + 多态中的转型 + 内部类:多态概念与前提、多态成员访问特点、向上转型/向下转型、instanceof类型判断、多态的好处(开闭原则)、抽象类与多态结合(Animal→Dog;Person→Student/Teacher综合案例)、Usb接口多态案例(NoteBook接入鼠标/猫)、内部类概念与使用场景、成员内部类、私有内部类设计原则](./课堂笔记/01-JavaSE基础-笔记/20260724-笔记.md) |
-| 2026-07-27 | [匿名内部类:内部类三大分类、匿名内部类语法格式与本质、三种使用方式(多态接收/方法参数/匿名对象直接调用)、接口与抽象类定义(Usb/Tableware/Compute/Sort)、综合案例(USB设备/餐具/学生排序)](./课堂笔记/01-JavaSE基础-笔记/20260727-笔记.md) |
+| 2026-07-27 | [匿名内部类 + Java API 与 String 类:内部类三大分类、匿名内部类四种使用方式(多态接收/方法参数/匿名对象直接调用/继承普通类)、配套接口与抽象类、综合案例(USB/餐具/学生排序/计算器/动物叫声;API概念、String内存模型(常量池 vs 堆)、== 与 equals()、String构造方法、String常用方法大全](./课堂笔记/01-JavaSE基础-笔记/20260727-笔记.md) |
 
 
 ## 二、授课代码
 ## 二、授课代码
 
 
@@ -51,7 +51,7 @@
 | 2026-07-22 | 继承:继承概念与格式、方法重写(Override)、super 关键字、就近原则、继承中构造方法、单继承与多层继承、访问修饰符、综合练习(学生管理系统+冒泡排序)、课后作业 | `c260722` | [`course`](./授课代码/c260722/src/course/) / [`exercise/studentSystem`](./授课代码/c260722/src/exercise/studentSystem/) / [`homework/p08_guessgame`](./授课代码/c260722/src/homework/p08_guessgame/) / [`homework/p09_bookmanager`](./授课代码/c260722/src/homework/p09_bookmanager/) |
 | 2026-07-22 | 继承:继承概念与格式、方法重写(Override)、super 关键字、就近原则、继承中构造方法、单继承与多层继承、访问修饰符、综合练习(学生管理系统+冒泡排序)、课后作业 | `c260722` | [`course`](./授课代码/c260722/src/course/) / [`exercise/studentSystem`](./授课代码/c260722/src/exercise/studentSystem/) / [`homework/p08_guessgame`](./授课代码/c260722/src/homework/p08_guessgame/) / [`homework/p09_bookmanager`](./授课代码/c260722/src/homework/p09_bookmanager/) |
 | 2026-07-23 | 抽象类 + final + 模板方法 + 代码块 + 接口(含JDK8+新特性):抽象类定义与特点、final 类/方法/变量、模板方法模式(MyOneDayTemplate)、三种代码块(局部/构造/静态)、接口定义与实现(Usb→LogiMouse/ROGMouse)、接口 vs 抽象类对比、JDK8默认方法/静态方法(MyDefaultInterface→MyDefaultInterfaceImpl)、JDK9私有方法(抽取多个默认方法公共代码)、Test05 测试类 | `c260723` | [`course`](./授课代码/c260723/src/course/) |
 | 2026-07-23 | 抽象类 + final + 模板方法 + 代码块 + 接口(含JDK8+新特性):抽象类定义与特点、final 类/方法/变量、模板方法模式(MyOneDayTemplate)、三种代码块(局部/构造/静态)、接口定义与实现(Usb→LogiMouse/ROGMouse)、接口 vs 抽象类对比、JDK8默认方法/静态方法(MyDefaultInterface→MyDefaultInterfaceImpl)、JDK9私有方法(抽取多个默认方法公共代码)、Test05 测试类 | `c260723` | [`course`](./授课代码/c260723/src/course/) |
 | 2026-07-24 | 多态概念与前提、多态成员访问特点、向上转型/向下转型、instanceof运算符、多态的好处(开闭原则)、抽象类+多态(Animal→Dog、Person→Student/Teacher→Test03.runPerson())、接口多态(Usb→Mouse/Cat→NoteBook)、内部类概念与使用场景 | `c260724` | [`course/polymorphism`](./授课代码/c260724/src/course/polymorphism/) / [`course/internalClass`](./授课代码/c260724/src/course/internalClass/) |
 | 2026-07-24 | 多态概念与前提、多态成员访问特点、向上转型/向下转型、instanceof运算符、多态的好处(开闭原则)、抽象类+多态(Animal→Dog、Person→Student/Teacher→Test03.runPerson())、接口多态(Usb→Mouse/Cat→NoteBook)、内部类概念与使用场景 | `c260724` | [`course/polymorphism`](./授课代码/c260724/src/course/polymorphism/) / [`course/internalClass`](./授课代码/c260724/src/course/internalClass/) |
-| 2026-07-27 | 匿名内部类:内部类三大分类概念回顾、匿名内部类语法格式与本质、三种使用方式(多态接收变量赋值 / 方法参数传递 / 匿名对象直接调用)、配套接口/抽象类定义(Usb / Tableware / Compute / Sort)、综合案例(NoteBook USB设备 / Person 餐具 / 学生排序比较) | `c260727` | [`course`](./授课代码/c260727/src/course/) / [`homework_0724/p2_myarray`](./授课代码/c260727/src/homework_0724/p2_myarray/) |
+| 2026-07-27 | 匿名内部类:内部类三大分类概念回顾、匿名内部类语法格式与本质、三种使用方式(多态接收变量赋值 / 方法参数传递 / 匿名对象直接调用)、配套接口/抽象类定义(Usb / Tableware / Compute / Sort)、综合案例(NoteBook USB设备 / Person 餐具 / 学生排序比较 / Calculator计算器 / Animal动物叫声;Java API 概述与 String 类:API概念、String内存模型(常量池 vs 堆)、构造方法、== 与 equals() 区别、String常用方法大全 | `c260727` | [`course/anonymousInternalClass`](./授课代码/c260727/src/course/anonymousInternalClass/) / [`course/api`](./授课代码/c260727/src/course/api/) / [`exercise/exercise01`](./授课代码/c260727/src/exercise/exercise01/) / [`exercise/exercise06`](./授课代码/c260727/src/exercise/exercise06/) / [`exercise/exercise07`](./授课代码/c260727/src/exercise/exercise07/) / [`homework_0724/p2_myarray`](./授课代码/c260727/src/homework_0724/p2_myarray/) |
 
 
 ## 三、课堂练习题
 ## 三、课堂练习题
 
 

+ 0 - 0
授课代码/c260727/src/course/Compute.java → 授课代码/c260727/src/course/anonymousInternalClass/Compute.java


+ 0 - 0
授课代码/c260727/src/course/Demo01.java → 授课代码/c260727/src/course/anonymousInternalClass/Demo01.java


+ 0 - 0
授课代码/c260727/src/course/NoteBook.java → 授课代码/c260727/src/course/anonymousInternalClass/NoteBook.java


+ 0 - 0
授课代码/c260727/src/course/Person.java → 授课代码/c260727/src/course/anonymousInternalClass/Person.java


+ 0 - 0
授课代码/c260727/src/course/Sort.java → 授课代码/c260727/src/course/anonymousInternalClass/Sort.java


+ 0 - 0
授课代码/c260727/src/course/Student.java → 授课代码/c260727/src/course/anonymousInternalClass/Student.java


+ 0 - 0
授课代码/c260727/src/course/Tableware.java → 授课代码/c260727/src/course/anonymousInternalClass/Tableware.java


+ 0 - 0
授课代码/c260727/src/course/Test01.java → 授课代码/c260727/src/course/anonymousInternalClass/Test01.java


+ 0 - 0
授课代码/c260727/src/course/Test02.java → 授课代码/c260727/src/course/anonymousInternalClass/Test02.java


+ 0 - 0
授课代码/c260727/src/course/Test03.java → 授课代码/c260727/src/course/anonymousInternalClass/Test03.java


+ 0 - 0
授课代码/c260727/src/course/Usb.java → 授课代码/c260727/src/course/anonymousInternalClass/Usb.java


+ 0 - 0
授课代码/c260727/src/course/筷子.java → 授课代码/c260727/src/course/anonymousInternalClass/筷子.java


+ 11 - 0
授课代码/c260727/src/course/api/Demo01.java

@@ -0,0 +1,11 @@
+package course.api;
+
+/**
+ * @title Demo01
+ * @description 
+ * @author WanJl 
+ * @version 1.0 
+ * @create 2026/7/27 
+ */
+public class Demo01 {
+}

+ 11 - 0
授课代码/c260727/src/course/api/StringTest.java

@@ -0,0 +1,11 @@
+package course.api;
+
+/**
+ * @title StringTest
+ * @description 
+ * @author WanJl 
+ * @version 1.0 
+ * @create 2026/7/27 
+ */
+public class StringTest {
+}

+ 11 - 0
授课代码/c260727/src/course/api/StringTest02.java

@@ -0,0 +1,11 @@
+package course.api;
+
+/**
+ * @title StringTest02
+ * @description 
+ * @author WanJl 
+ * @version 1.0 
+ * @create 2026/7/27 
+ */
+public class StringTest02 {
+}

+ 11 - 0
授课代码/c260727/src/exercise/exercise01/ComputerStudent.java

@@ -0,0 +1,11 @@
+package exercise.exercise01;
+
+/**
+ * @title ComputerStudent
+ * @description 
+ * @author WanJl 
+ * @version 1.0 
+ * @create 2026/7/27 
+ */
+public class ComputerStudent {
+}

+ 11 - 0
授课代码/c260727/src/exercise/exercise01/Student.java

@@ -0,0 +1,11 @@
+package exercise.exercise01;
+
+/**
+ * @title Student
+ * @description 
+ * @author WanJl 
+ * @version 1.0 
+ * @create 2026/7/27 
+ */
+public class Student {
+}

+ 11 - 0
授课代码/c260727/src/exercise/exercise01/Test.java

@@ -0,0 +1,11 @@
+package exercise.exercise01;
+
+/**
+ * @title Test
+ * @description 
+ * @author WanJl 
+ * @version 1.0 
+ * @create 2026/7/27 
+ */
+public class Test {
+}

+ 11 - 0
授课代码/c260727/src/exercise/exercise06/EatTest.java

@@ -0,0 +1,11 @@
+package exercise.exercise06;
+
+/**
+ * @title EatTest
+ * @description 
+ * @author WanJl 
+ * @version 1.0 
+ * @create 2026/7/27 
+ */
+public class EatTest {
+}

+ 20 - 0
授课代码/c260727/src/exercise/exercise06/Person.java

@@ -0,0 +1,20 @@
+package course;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Person
+ * @description
+ * @create 2026/7/27
+ */
+public class Person {
+    /**
+     * 吃饭
+     * @param tableware 吃饭使用的餐具
+     */
+    public void eat(Tableware tableware){
+        tableware.openTableware();
+        tableware.useTableware();
+        System.out.println("开始干饭......");
+    }
+}

+ 13 - 0
授课代码/c260727/src/exercise/exercise06/Tableware.java

@@ -0,0 +1,13 @@
+package course;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Tableware
+ * @description
+ * @create 2026/7/27
+ */
+public interface Tableware {
+    void openTableware();
+    void useTableware();
+}

+ 11 - 0
授课代码/c260727/src/exercise/exercise07/TestAnonymous.java

@@ -0,0 +1,11 @@
+package exercise.exercise07;
+
+/**
+ * @title TestAnonymous
+ * @description 
+ * @author WanJl 
+ * @version 1.0 
+ * @create 2026/7/27 
+ */
+public class TestAnonymous {
+}

+ 11 - 0
授课代码/c260727/src/exercise/exercise07/TestCalculator.java

@@ -0,0 +1,11 @@
+package exercise.exercise07;
+
+/**
+ * @title TestCalculator
+ * @description 
+ * @author WanJl 
+ * @version 1.0 
+ * @create 2026/7/27 
+ */
+public class TestCalculator {
+}

+ 251 - 3
课堂笔记/01-JavaSE基础-笔记/20260727-笔记.md

@@ -133,6 +133,40 @@ new Compute() {
 
 
 **注意**:这种方式因为没有变量名,所以只能调用一次。
 **注意**:这种方式因为没有变量名,所以只能调用一次。
 
 
+### 2.8 继承普通类的匿名内部类
+
+匿名内部类不仅可以继承抽象类或实现接口,也可以继承 **普通类(非抽象)**。
+
+```java
+// Student 是普通类(非抽象、非接口)
+new Student(1001, "张三", 25, "男") {
+    String s = "哈哈哈哈";
+
+    @Override
+    public void study() {
+        System.out.println("临时学员" + getName() + "在学习");
+    }
+
+    @Override
+    public void lesson() {
+        System.out.println("临时学员" + getName() + "在上课");
+    }
+
+    public void myDay() {
+        study();
+        lesson();
+        System.out.println(s);
+    }
+}.myDay();  // 直接调用匿名内部类的特有方法
+```
+> 📄 来源:`exercise01/Test.java`
+
+**特点**:
+- 可以重写父类的非抽象方法(`study()`、`lesson()`)
+- 可以定义匿名内部类特有的方法(`myDay()`)
+- 可以通过匿名对象直接调用特有方法
+- 适合临时扩展已有类的行为,而不需要显式创建子类
+
 ---
 ---
 
 
 ## 三、接口与抽象类定义
 ## 三、接口与抽象类定义
@@ -307,9 +341,223 @@ System.out.println(max.getName());
 
 
 **说明**:使用匿名内部类实现 `Sort` 接口的比较逻辑,根据学生 ID 比较大小,返回较小的学生对象。
 **说明**:使用匿名内部类实现 `Sort` 接口的比较逻辑,根据学生 ID 比较大小,返回较小的学生对象。
 
 
+### 5.4 抽象类匿名内部类案例
+
+匿名内部类可以直接继承抽象类,并实现其所有抽象方法。
+
+```java
+abstract class Animal {
+    public abstract void makeSound();
+}
+
+public class TestAnonymous {
+    public static void main(String[] args) {
+        new Animal() {
+            @Override
+            public void makeSound() {
+                System.out.println("喵喵喵");
+            }
+        }.makeSound();
+    }
+}
+```
+> 📄 来源:`exercise07/TestAnonymous.java`
+
+### 5.5 接口多实现案例(计算器)
+
+同一个接口,通过多个匿名内部类实现不同的业务逻辑。
+
+```java
+interface Calculator {
+    int calculate(int a, int b);
+}
+
+public class TestCalculator {
+    public static void main(String[] args) {
+        // 加法
+        new Calculator() {
+            @Override
+            public int calculate(int a, int b) { return a + b; }
+        }.calculate(15, 7);
+
+        // 减法
+        new Calculator() {
+            @Override
+            public int calculate(int a, int b) { return a - b; }
+        }.calculate(15, 7);
+
+        // 乘法
+        new Calculator() {
+            @Override
+            public int calculate(int a, int b) { return a * b; }
+        }.calculate(15, 7);
+
+        // 除法
+        new Calculator() {
+            @Override
+            public int calculate(int a, int b) { return a / b; }
+        }.calculate(15, 7);
+    }
+}
+```
+> 📄 来源:`exercise07/TestCalculator.java`
+
+**说明**:同一个 `Calculator` 接口,通过 4 个不同的匿名内部类分别实现加、减、乘、除四种运算,体现了匿名内部类灵活多变的特性。
+
+---
+
+## 六、Java API 概述
+
+### 6.1 什么是 API
+
+**API(Application Programming Interface)**—— 应用程序编程接口。
+
+Java 中的 API 指 JDK 提供的各种功能的 Java 类,这些类把底层的实现封装了起来。我们不需要关心这些类是怎么实现的,只需要学习怎么去使用这些类即可。
+
+我们可以通过 **Java 帮助文档** 来学习怎么使用这些 API。
+
+> 📄 来源:`api/Demo01.java`
+
+包括之前使用过的 `Scanner` 键盘输入类和 `Random` 随机数类,都属于 Java 的 API。
+
+### 6.2 String 字符串类
+
+`String` 是 Java 中最常用的 API 类之一,用于处理字符串数据。
+
+#### 6.2.1 String 的内存模型
+
+String 类型的变量存储位置有两种情况:
+
+| 创建方式 | 存储位置 | 特点 |
+|----------|---------|------|
+| **直接赋值** `String s = "Hello";` | **字符串常量池** | 只要字符序列(顺序和大小写)相同,JVM 只建立一个 String 对象并维护在常量池中 |
+| **构造方法创建** `new String("Hello");` | **堆内存** | 每次 `new` 都会在堆中创建一个新对象,内容相同但地址值不同 |
+
+```java
+String s1 = "Hello";
+String s2 = "Hello";
+System.out.println(s1 == s2); // true —— 常量池中同一个对象
+
+String s4 = new String("Hello");
+String s5 = new String("Hello");
+System.out.println(s1 == s4); // false —— 常量池 vs 堆,地址不同
+System.out.println(s4 == s5); // false —— 堆中两个不同对象
+```
+> 📄 来源:`api/StringTest.java`
+
+#### 6.2.2 String 的构造方法
+
+| 构造方法 | 说明 |
+|----------|------|
+| `public String()` | 创建空白字符串对象,不含任何内容 |
+| `public String(char[] chs)` | 根据字符数组的内容创建字符串 |
+| `public String(String original)` | 根据传入的字符串内容创建字符串 |
+| `String s = "abc"` | 直接赋值方式创建(常用) |
+
+```java
+String s1 = new String();              // 空白字符串
+char[] chs = {'H', 'e', 'l', 'l', 'o'};
+String s2 = new String(chs);           // "Hello"
+String s3 = new String("Hello");       // "Hello"
+String s4 = "Hello";                   // 直接赋值
+```
+> 📄 来源:`api/StringTest.java`
+
+#### 6.2.3 `==` 与 `equals()` 的区别
+
+| 比较方式 | 基本数据类型 | 引用数据类型 |
+|----------|-------------|-------------|
+| **`==`** | 比较具体的值 | 比较内存地址 |
+| **`equals()`** | — | 比较对象的内容(String 已重写) |
+
+```java
+String s4 = new String("Hello");
+String s5 = new String("Hello");
+System.out.println(s4 == s5);       // false —— 比较地址
+System.out.println(s4.equals(s5));  // true  —— 比较内容
+```
+> 📄 来源:`api/StringTest.java`
+
+### 6.3 String 常用方法
+
+```java
+String str1 = "  hello world  ";
+String str2 = "  Hello World  ";
+```
+
+#### 6.3.1 比较方法
+
+| 方法 | 说明 |
+|------|------|
+| `equals(String s)` | 比较字符串内容是否相同,**区分大小写** |
+| `equalsIgnoreCase(String s)` | 比较字符串内容是否相同,**不区分大小写** |
+
+```java
+boolean b  = str1.equals(str2);          // false
+boolean b1 = str1.equalsIgnoreCase(str2); // true(忽略大小写)
+```
+
+#### 6.3.2 获取信息方法
+
+| 方法 | 说明 |
+|------|------|
+| `length()` | 返回字符串长度 |
+| `charAt(int index)` | 返回指定索引位置的字符 |
+| `isEmpty()` | 判断字符串是否为空(长度为 0) |
+| `isBlank()` | 判断字符串是否为空或空白字符(JDK 11+) |
+
+```java
+int len  = str1.length();     // 15
+char c   = str1.charAt(2);    // ' '
+boolean e = str1.isEmpty();   // false
+boolean b = str1.isBlank();   // false(JDK 11+)
+```
+
+#### 6.3.3 截取与查找方法
+
+| 方法 | 说明 |
+|------|------|
+| `substring(int begin, int end)` | 截取字符串 `[begin, end)`,含头不含尾 |
+| `indexOf(String s)` | 返回子字符串第一次出现的位置,未找到返回 -1 |
+| `contains(String s)` | 判断是否包含指定子字符串 |
+| `startsWith(String s)` | 判断是否以指定字符串开头 |
+| `endsWith(String s)` | 判断是否以指定字符串结尾 |
+
+```java
+String sub = str1.substring(0, 5);   // "  hel"(索引0~4)
+int idx    = str1.indexOf("lo");     // 2
+boolean b  = str1.contains("world"); // true
+```
+
+#### 6.3.4 转换与替换方法
+
+| 方法 | 说明 |
+|------|------|
+| `toUpperCase()` | 字符串转大写 |
+| `toLowerCase()` | 字符串转小写 |
+| `trim()` | 去除首尾空格(半角) |
+| `strip()` | 去除首尾全角/半角空格(JDK 11+) |
+| `replace(String old, String new)` | 将旧字符串替换为新字符串 |
+| `split(String regex)` | 按指定字符分割为字符串数组 |
+| `String.join(String delimiter, CharSequence... elements)` | 使用指定分隔符拼接多个字符串 |
+
+```java
+String upper   = str1.toUpperCase();             // "  HELLO WORLD  "
+String lower   = str1.toLowerCase();             // "  hello world  "
+String trim    = str1.trim();                    // "hello world"
+String strip   = str1.strip();                   // "hello world"(JDK 11+)
+String replace = str1.replace("world", "java");  // "  hello java  "
+
+String[] arr   = "A,B,C".split(",");             // ["A", "B", "C"]
+String joined  = String.join("-", "A", "B", "C"); // "A-B-C"
+```
+> 📄 来源:`api/StringTest02.java`
+
+> **注意**:`String` 类比较特殊,**打印其对象名时不会输出内存地址,而是输出该对象所记录的字符串内容**。这个特性是通过重写 `Object` 类的 `toString()` 方法实现的。
+
 ---
 ---
 
 
-## 六、匿名内部类应用场景总结
+## 、匿名内部类应用场景总结
 
 
 | 场景 | 说明 | 示例 |
 | 场景 | 说明 | 示例 |
 |------|------|------|
 |------|------|------|
@@ -325,7 +573,7 @@ System.out.println(max.getName());
 
 
 ---
 ---
 
 
-## 、随堂练习要点
+## 、随堂练习要点
 
 
 > 📄 对应练习文件:`课堂练习题/20260727-内部类练习.md`
 > 📄 对应练习文件:`课堂练习题/20260727-内部类练习.md`
 
 
@@ -339,7 +587,7 @@ System.out.println(max.getName());
 
 
 ---
 ---
 
 
-## 、拓展阅读
+## 、拓展阅读
 
 
 - [Java 匿名内部类(Anonymous Inner Class)详解](https://docs.oracle.com/javase/tutorial/java/javaOO/anonymous.html)
 - [Java 匿名内部类(Anonymous Inner Class)详解](https://docs.oracle.com/javase/tutorial/java/javaOO/anonymous.html)
 - 内部类与 Lambda 表达式的关系(后续课程会详细讲解)
 - 内部类与 Lambda 表达式的关系(后续课程会详细讲解)