|
@@ -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 学生类
|
|
### 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` 中以注释形式列出,作为课后实现任务。
|
|
> 以下练习在 `Demo02.java`、`Demo03.java` 和 `Demo04.java` 中以注释形式列出,作为课后实现任务。
|
|
@@ -661,6 +826,13 @@ public class Product {
|
|
|
|
|
|
|
|
为 `Product` 类创建测试类 `ProductTest`,创建商品对象并通过 setter 赋值,通过 getter 输出所有属性值。
|
|
为 `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` |
|
|
| 17 | `this` 关键字 | 区分同名的成员变量和局部变量,指向当前对象 | `Product.java` |
|
|
|
| 18 | `default` 权限修饰符 | 默认访问权限,同包中可以访问 | `Demo04.java` |
|
|
| 18 | `default` 权限修饰符 | 默认访问权限,同包中可以访问 | `Demo04.java` |
|
|
|
| 19 | `protected` 权限修饰符 | 受保护权限,同包+非同包子类可以访问 | `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` |
|
|
|
|
|
|
|
|
---
|
|
---
|
|
|
|
|
|