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

docs: 更新20260720课堂笔记,同步代码变更——新增包(Package)声明与同包访问、方法返回对象数组、p2综合应用(学生管理+随机抽取)

WanJL 1 день назад
Родитель
Сommit
a45b467dc2

+ 1 - 1
README.md

@@ -41,5 +41,5 @@
 | 2026-07-15 | switch分支、循环结构与数组 | `c260715` | [默认包](./授课代码/c260715/src/) |
 | 2026-07-16 | 多维数组、forEach、Arrays工具类、三种排序算法(冒泡/选择/插入)与 Scanner 键盘输入 | `c260716` | [默认包](./授课代码/c260716/src/) |
 | 2026-07-17 | Java方法4种声明方式、数组作为方法参数、Random随机数类、在线OJ编码模板、三种排序算法复习、Scanner学生信息采集系统(BMI计算) | `c260717` | [默认包](./授课代码/c260717/src/) |
-| 2026-07-20 | 面向对象基础:类与对象、成员变量与成员方法、创建对象与使用成员、对象地址输出、成员变量 vs 局部变量、对象引用与内存共享、对象数组、循环创建对象并存入数组、多个类协同建模(古诗场景/交通场景)、封装(private/setter/getter/this关键字/权限修饰符) | `c260720` | [默认包](./授课代码/c260720/src/) |
+| 2026-07-20 | 面向对象基础:类与对象、成员变量与成员方法、创建对象与使用成员、对象地址输出、成员变量 vs 局部变量、对象引用与内存共享、对象数组、循环创建对象并存入数组、多个类协同建模(古诗场景/交通场景)、封装(private/setter/getter/this关键字/权限修饰符)、包(Package)声明与同包访问、方法返回对象数组、综合应用(学生管理+随机抽取) | `c260720` | [默认包](./授课代码/c260720/src/) |
 

+ 3 - 1
授课代码/c260720/src/BaiLu.java → 授课代码/c260720/src/p1/BaiLu.java

@@ -1,7 +1,9 @@
+package p1;
+
 /**
  * @author WanJl
  * @version 1.0
- * @title BaiLu
+ * @title p1.BaiLu
  * @description
  * @create 2026/7/20
  */

+ 3 - 1
授课代码/c260720/src/Bike.java → 授课代码/c260720/src/p1/Bike.java

@@ -1,7 +1,9 @@
+package p1;
+
 /**
  * @author WanJl
  * @version 1.0
- * @title Bike 自行车类
+ * @title p1.Bike 自行车类
  * @description
  * @create 2026/7/20
  */

+ 3 - 1
授课代码/c260720/src/Car.java → 授课代码/c260720/src/p1/Car.java

@@ -1,7 +1,9 @@
+package p1;
+
 /**
  * @author WanJl
  * @version 1.0
- * @title Car 汽车类
+ * @title p1.Car 汽车类
  * @description
  * @create 2026/7/20
  */

+ 3 - 1
授课代码/c260720/src/Demo01.java → 授课代码/c260720/src/p1/Demo01.java

@@ -1,7 +1,9 @@
+package p1;
+
 /**
  * @author WanJl
  * @version 1.0
- * @title Demo01
+ * @title p1.Demo01
  * @description 面向对象基础-类和对象
  * @create 2026/7/20
  */

+ 5 - 3
授课代码/c260720/src/Demo02.java → 授课代码/c260720/src/p1/Demo02.java

@@ -1,7 +1,9 @@
+package p1;
+
 /**
  * @author WanJl
  * @version 1.0
- * @title Demo02
+ * @title p1.Demo02
  * @description 对象
  * @create 2026/7/20
  */
@@ -10,8 +12,8 @@ public class Demo02 {
         创建对象和使用对象
     格式:
         类名 对象名=new 类名();
-        Dog dog=new Dog();
-        Student s=new Student();
+        p1.Dog dog=new p1.Dog();
+        p1.Student s=new p1.Student();
     调用成员的格式:
         对象名.成员变量;
         对象名.成员方法;

+ 5 - 3
授课代码/c260720/src/Demo03.java → 授课代码/c260720/src/p1/Demo03.java

@@ -1,7 +1,9 @@
+package p1;
+
 /**
  * @author WanJl
  * @version 1.0
- * @title Demo03
+ * @title p1.Demo03
  * @description
  * @create 2026/7/20
  */
@@ -46,9 +48,9 @@ public class Demo03 {
         并在测试类中创建对应的对象调用方法
         描述:一辆汽车在路上行驶,一队自行车并排骑行
        2、 需求分析:
-        类 1:Car(单个对象)
+        类 1:p1.Car(单个对象)
         属性:品牌、颜色;方法 drive () 行驶
-        类 2:Bike(对象数组,一队)
+        类 2:p1.Bike(对象数组,一队)
         属性:车型;方法 ride () 骑行
         测试类:创建汽车对象,创建自行车数组,分别调用方法
      */

+ 33 - 4
授课代码/c260720/src/Demo04.java → 授课代码/c260720/src/p1/Demo04.java

@@ -1,7 +1,9 @@
+package p1;
+
 /**
  * @author WanJl
  * @version 1.0
- * @title Demo04
+ * @title p1.Demo04
  * @description 封装
  * @create 2026/7/20
  */
@@ -25,13 +27,13 @@ public class Demo04 {
             或可以理解为  自己 组装电脑 和 买 一体机 笔记本电脑
 
             比如有个 Person类
-            public class Person{    //程序 服务
+            public class p1.Person{    //程序 服务
                 String name;
                 int age;
             }
             public static void main(String[] args){//是我们站在用户的角度对程序进行测试的
                 //创建Person对象
-                Person p=new Person();
+                p1.Person p=new p1.Person();
                 p.name="张三";
                 p.age=250;
                 // p.age==-250000;虽然代码编译正确,但是不符合现实业务逻辑
@@ -49,7 +51,7 @@ public class Demo04 {
 
             练习:
                 1、 补全Person类,为name 修饰private,并配置set和get方法
-                2、 创建 Product 商品类,定义私有成员变量 品牌、名称、价格、数量 并对每个成员变量设置赋值和取值的方法
+                2、 创建 p1.Product 商品类,定义私有成员变量 品牌、名称、价格、数量 并对每个成员变量设置赋值和取值的方法
                 3、 创建Bird 类,定义私有成员变量 3个,并对每个成员变量设置赋值和取值的方法
 
 
@@ -71,5 +73,32 @@ public class Demo04 {
                 private 私人的私有的,使用private修饰的变量和方法,除了自身之外的任何类都不能访问。
                 default 默认的       不使用任何修饰符修饰的变量和方法,本类中、同包中可以访问。
                 protected 本类中、同包中可以访问。非同包的子类可以访问,等到讲继承的时候再说
+     */
+    /*
+        创建一个学生类Student
+        包含私有成员变量:
+            id  学号  (从1开始,每位递增1)
+            name 姓名
+        公共的赋值和取值方法
+        -------------------------------------------------------------------
+        创建一个StudentDemo类
+            有一个成员变量
+                整数类型的 studentCount; //表示学生的数量
+            里面有以下几个方法:
+
+            1、初始化方法 initStudents()
+            该方法会创建一个长度为studentCount的Student数组,
+            并创建5个学生对象,存入学生数组。
+            调用该方法时,会[返回]一个存有5位学生的 Student数组
+
+            2、随机学生方法 randomStudent()
+            该方法中调用Random对象,随机出一个 1~studentCount的随机整数(也就是学生id)
+            调用该方法,会返回随机出的一个学生id。
+
+
+
+
+
+
      */
 }

+ 3 - 1
授课代码/c260720/src/Dog.java → 授课代码/c260720/src/p1/Dog.java

@@ -1,7 +1,9 @@
+package p1;
+
 /**
  * @author WanJl
  * @version 1.0
- * @title Dog
+ * @title p1.Dog
  * @description
  * @create 2026/7/20
  */

+ 3 - 1
授课代码/c260720/src/HuangLi.java → 授课代码/c260720/src/p1/HuangLi.java

@@ -1,7 +1,9 @@
+package p1;
+
 /**
  * @author WanJl
  * @version 1.0
- * @title HuangLi
+ * @title p1.HuangLi
  * @description 黄鹂类
  * @create 2026/7/20
  */

+ 3 - 1
授课代码/c260720/src/Person.java → 授课代码/c260720/src/p1/Person.java

@@ -1,7 +1,9 @@
+package p1;
+
 /**
  * @author WanJl
  * @version 1.0
- * @title Person
+ * @title p1.Person
  * @description
  * @create 2026/7/20
  */

+ 3 - 1
授课代码/c260720/src/PersonTest.java → 授课代码/c260720/src/p1/PersonTest.java

@@ -1,7 +1,9 @@
+package p1;
+
 /**
  * @author WanJl
  * @version 1.0
- * @title PersonTest
+ * @title p1.PersonTest
  * @description
  * @create 2026/7/20
  */

+ 3 - 1
授课代码/c260720/src/Product.java → 授课代码/c260720/src/p1/Product.java

@@ -1,7 +1,9 @@
+package p1;
+
 /**
  * @author WanJl
  * @version 1.0
- * @title Product
+ * @title p1.Product
  * @description 商品类
  * @create 2026/7/20
  */

+ 3 - 1
授课代码/c260720/src/Student.java → 授课代码/c260720/src/p1/Student.java

@@ -1,7 +1,9 @@
+package p1;
+
 /**
  * @author WanJl
  * @version 1.0
- * @title Student
+ * @title p1.Student
  * @description 学生类
  * @create 2026/7/20
  */

+ 3 - 1
授课代码/c260720/src/Teacher.java → 授课代码/c260720/src/p1/Teacher.java

@@ -1,7 +1,9 @@
+package p1;
+
 /**
  * @author WanJl
  * @version 1.0
- * @title Teacher
+ * @title p1.Teacher
  * @description 教师类
  * @create 2026/7/20
  */

+ 5 - 3
授课代码/c260720/src/TeacherTest.java → 授课代码/c260720/src/p1/TeacherTest.java

@@ -1,7 +1,9 @@
+package p1;
+
 /**
  * @author WanJl
  * @version 1.0
- * @title TeacherTest
+ * @title p1.TeacherTest
  * @description Teacher测试类
  * @create 2026/7/20
  */
@@ -24,8 +26,8 @@ public class TeacherTest {
         System.out.println(t);
         /*
             我们直接输出t对象,得到的是这个对象在内存中的地址:
-            Teacher@4769b07b
-            Teacher 代表这个对象所属的类型
+            p1.Teacher@4769b07b
+            p1.Teacher 代表这个对象所属的类型
             @ 分隔符
             4769b07b 是在内存中开辟的空间的地址,也就是teacher对象的地址
          */

+ 5 - 3
授课代码/c260720/src/Test01.java → 授课代码/c260720/src/p1/Test01.java

@@ -1,9 +1,11 @@
+package p1;
+
 import java.util.Arrays;
 
 /**
  * @author WanJl
  * @version 1.0
- * @title Test01
+ * @title p1.Test01
  * @description
  * @create 2026/7/20
  */
@@ -21,12 +23,12 @@ public class Test01 {
         System.out.println(Arrays.toString(bailus));
         for (int i = 0; i <10; i++) {
             //创建一个白鹭对象
-            // b存着的其实是 白鹭对象的地址值 BaiLu&15AFBC25
+            // b存着的其实是 白鹭对象的地址值 p1.BaiLu&15AFBC25
             BaiLu b=new BaiLu();
             //调用b对象 上青天的方法
             b.up(s2);
             //把创建的白鹭对象b存入到白鹭数组bailus的索引值位置
-            bailus[i]=b;    //其实存入到数组的也是白鹭对象的地址 BaiLu&15AFBC25
+            bailus[i]=b;    //其实存入到数组的也是白鹭对象的地址 p1.BaiLu&15AFBC25
             System.out.println(Arrays.toString(bailus));
 
         }

+ 3 - 1
授课代码/c260720/src/Test02.java → 授课代码/c260720/src/p1/Test02.java

@@ -1,7 +1,9 @@
+package p1;
+
 /**
  * @author WanJl
  * @version 1.0
- * @title Test02
+ * @title p1.Test02
  * @description 测试类
  * @create 2026/7/20
  */

+ 30 - 0
授课代码/c260720/src/p2/Student.java

@@ -0,0 +1,30 @@
+package p2;
+
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Student
+ * @description
+ * @create 2026/7/20
+ */
+public class Student {
+    private int id;
+    private String name;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+}

+ 57 - 0
授课代码/c260720/src/p2/StudentDemo.java

@@ -0,0 +1,57 @@
+package p2;
+
+
+import java.util.Random;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title StudentDemo
+ * @description
+ * @create 2026/7/20
+ */
+public class StudentDemo {
+    //学生数量
+    private int studentCount=5;
+
+    /**
+     * 用来初始化学生数组的方法
+     * @return 学生数组
+     */
+    public Student[] initStudents(){
+        Student[] students=new Student[studentCount];
+        students[0]=new Student();
+        students[0].setId(1);
+        students[0].setName("占山");
+
+        students[1]=new Student();
+        students[1].setId(2);
+        students[1].setName("李四");
+
+        students[2]=new Student();
+        students[2].setId(3);
+        students[2].setName("王五");
+
+        students[3]=new Student();
+        students[3].setId(4);
+        students[3].setName("赵六");
+
+        students[4]=new Student();
+        students[4].setId(5);
+        students[4].setName("赵赵");
+
+        return students;
+    }
+
+    public int randomStudent(){
+        //1、创建Random对象
+        Random ran=new Random();
+
+        //随机数 范围 1~studentCount
+        int id=ran.nextInt(studentCount)+1;
+        return id;
+    }
+
+
+
+}

+ 29 - 0
授课代码/c260720/src/p2/StudentTest.java

@@ -0,0 +1,29 @@
+package p2;
+
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title StudentTest
+ * @description
+ * @create 2026/7/20
+ */
+public class StudentTest {
+    public static void main(String[] args) {
+        //创建StudentDemo对象
+        StudentDemo sd=new StudentDemo();
+        //调用初始化学生的方法,得到一个数组
+        Student[] students = sd.initStudents();
+        //调用随机学生id的方法,获取随机数id
+        int ranId=sd.randomStudent();
+
+        //比较 ranId和学生数组students中的哪个元素的id属性相同
+        for (int i = 0; i < students.length; i++) {
+            Student s =students[i]; //拿取一个数组的元素赋值给学生变量名
+            if (ranId==s.getId()){  //得到的随机数 和 学生的id比较,然后获取学生id对应的姓名
+                System.out.println("随机到的学生是:"+s.getName());
+            }
+        }
+
+    }
+}

+ 176 - 0
课堂笔记/01-JavaSE基础-笔记/20260720-笔记.md

@@ -270,6 +270,71 @@ public String getName() {
 
 ---
 
+### 9. 包(Package)
+
+**文件**:`p2/Student.java`, `p2/StudentDemo.java`, `p2/StudentTest.java`
+
+#### 9.1 什么是包
+
+**包(Package)** 是 Java 中**组织类和接口**的一种机制,相当于文件系统中的**文件夹**。
+
+| 作用 | 说明 |
+|------|------|
+| **分类管理** | 将功能相关的类放在同一个包中,便于查找和使用 |
+| **避免命名冲突** | 不同包中可以有相同名称的类(如 `p1.Student` 和 `p2.Student`) |
+| **访问控制** | 包级别访问权限(`default`)只允许同包中的类访问 |
+
+#### 9.2 包的声明
+
+在 Java 源文件的第一行(注释之前)使用 `package` 关键字声明:
+
+```java
+package p2;  // 声明该类属于 p2 包
+
+// 有包名的类,全名是:p2.Student
+public class Student {
+    // ...
+}
+```
+
+> **命名规范**:公司域名倒写,如 `com.lovecoding.day01`、`com.lovecoding.day02`
+
+#### 9.3 包与目录结构
+
+包名必须与文件系统的目录结构一致:
+
+```
+c260720/src/
+├── p1/          ← 包 p1
+│   ├── Demo01.java
+│   ├── Student.java
+│   └── ...
+└── p2/          ← 包 p2
+    ├── Student.java
+    ├── StudentDemo.java
+    └── StudentTest.java
+```
+
+#### 9.4 同包中的类相互访问
+
+同一个包中的类可以直接使用,**无需 import**:
+
+```java
+// p2/StudentTest.java — 与 Student、StudentDemo 同包
+package p2;
+
+public class StudentTest {
+    public static void main(String[] args) {
+        StudentDemo sd = new StudentDemo();          // 直接使用,无需 import
+        Student[] students = sd.initStudents();
+        int ranId = sd.randomStudent();
+        // ...
+    }
+}
+```
+
+---
+
 ## 二、代码实战:类与对象完整示例
 
 ### 1. Student 学生类
@@ -591,6 +656,106 @@ public class Product {
 
 ---
 
+### 8. 包实战——Student 学生管理(p2 包综合应用)
+
+**文件**:`p2/Student.java`, `p2/StudentDemo.java`, `p2/StudentTest.java`
+
+综合运用 **封装 + 对象数组 + Random** 的完整案例,所有类位于 `p2` 包中。
+
+**实体类(p2/Student.java)**:
+
+```java
+package p2;
+
+public class Student {
+    private int id;         // 私有属性
+    private String name;
+
+    public void setId(int id) {
+        this.id = id;       // this 区分同名参数
+    }
+    public int getId() {
+        return id;
+    }
+    public void setName(String name) {
+        this.name = name;
+    }
+    public String getName() {
+        return name;
+    }
+}
+```
+
+**业务类(p2/StudentDemo.java)—— 初始化学生数组 + 随机抽取**:
+
+```java
+package p2;
+
+import java.util.Random;
+
+public class StudentDemo {
+    private int studentCount = 5;  // 学生数量
+
+    // 方法返回 Student[] 对象数组
+    public Student[] initStudents() {
+        Student[] students = new Student[studentCount];
+        students[0] = new Student();
+        students[0].setId(1);
+        students[0].setName("占山");
+
+        students[1] = new Student();
+        students[1].setId(2);
+        students[1].setName("李四");
+
+        students[2] = new Student();
+        students[2].setId(3);
+        students[2].setName("王五");
+
+        students[3] = new Student();
+        students[3].setId(4);
+        students[3].setName("赵六");
+
+        students[4] = new Student();
+        students[4].setId(5);
+        students[4].setName("赵赵");
+
+        return students;  // 返回对象数组
+    }
+
+    // 随机生成学生 ID
+    public int randomStudent() {
+        Random ran = new Random();
+        return ran.nextInt(studentCount) + 1;  // 1 ~ studentCount
+    }
+}
+```
+
+**测试类(p2/StudentTest.java)**:
+
+```java
+package p2;
+
+public class StudentTest {
+    public static void main(String[] args) {
+        StudentDemo sd = new StudentDemo();
+        Student[] students = sd.initStudents();   // 获取学生数组
+        int ranId = sd.randomStudent();           // 获取随机 ID
+
+        // 遍历数组,根据 ID 匹配学生姓名
+        for (int i = 0; i < students.length; i++) {
+            Student s = students[i];
+            if (ranId == s.getId()) {
+                System.out.println("随机到的学生是:" + s.getName());
+            }
+        }
+    }
+}
+```
+
+> **综合点**:本案例融合了**包声明**、**封装(private + getter/setter)**、**`this` 关键字**、**对象数组**、**Random 随机数**、**方法返回对象数组**等多个知识点,是面向对象基础的综合练习。
+
+---
+
 ## 三、随堂练习
 
 > 以下练习在 `Demo02.java`、`Demo03.java` 和 `Demo04.java` 中以注释形式列出,作为课后实现任务。
@@ -661,6 +826,13 @@ public class Product {
 
 为 `Product` 类创建测试类 `ProductTest`,创建商品对象并通过 setter 赋值,通过 getter 输出所有属性值。
 
+### 练习 12:包练习——创建 com.lovecoding 包结构
+
+模仿 `p2` 包的做法,创建以下包结构并编写类:
+- 包名:`com.lovecoding.test`
+- 在该包下创建一个 `Hello` 类,包含一个 `sayHello()` 方法,输出"Hello from package!"
+- 创建测试类,在同包中直接调用 `Hello` 类的方法
+
 ---
 
 ## 四、知识点总结
@@ -686,6 +858,10 @@ public class Product {
 | 17 | `this` 关键字 | 区分同名的成员变量和局部变量,指向当前对象 | `Product.java` |
 | 18 | `default` 权限修饰符 | 默认访问权限,同包中可以访问 | `Demo04.java` |
 | 19 | `protected` 权限修饰符 | 受保护权限,同包+非同包子类可以访问 | `Demo04.java` |
+| 20 | 包(Package) | 组织类和接口的机制,相当于文件夹 | `p2/Student.java` |
+| 21 | `package` 声明 | 源文件第一行声明所属包,与目录结构一致 | `p2/*.java` |
+| 22 | 同包访问规则 | 同包中的类直接使用,无需 `import` | `p2/StudentTest.java` |
+| 23 | 方法返回对象数组 | 方法返回值类型为 `Student[]`,返回对象数组引用 | `p2/StudentDemo.java` |
 
 ---