课程内容:面向对象基础(类与对象、成员变量与成员方法)、封装(private / setter / getter / this)、成员变量 vs 局部变量、对象数组、包(Package)
涉及前序知识:方法 4 种声明方式、数组作为方法参数、三种排序算法(冒泡/选择/插入)、Random 随机数
提交方式:在
提交\姓名\目录下创建对应的 Java 源文件截止时间:下次上课前
难度:⭐
知识点:类与对象、成员变量、成员方法
定义一个 Student 类,包含以下成员:
| 成员类型 | 名称 | 说明 |
|---|---|---|
| 成员变量 | name(String) |
学生姓名 |
| 成员变量 | age(int) |
学生年龄 |
| 成员变量 | className(String) |
班级名称 |
| 成员方法 | showInfo() |
输出学生所有信息,格式见下方 |
| 成员方法 | study(String course) |
输出"xxx 正在学习 xxx",例如"张三 正在学习 Java" |
输出格式要求:
调用 showInfo() 输出:
姓名:张三
年龄:25
班级:J260713
调用 study("Java") 输出:
张三 正在学习 Java
要求:
main 方法中创建 2 个 Student 对象showInfo() 和 study() 方法示例代码框架:
/**
* @author 你的姓名
* @title 题目1:学生类定义与对象创建
* @create 2026/7/20
*/
public class Demo_01_姓名 {
public static void main(String[] args) {
// 创建第一个学生对象
// 为属性赋值
// 调用方法
}
}
// 将 Student 类定义在同一个文件中
class Student {
String name;
int age;
String className;
public void showInfo() {
// 输出学生信息
}
public void study(String course) {
// 输出学习信息
}
}
💡 提示:同一个
.java文件中可以定义多个类,但只能有一个public class。
难度:⭐⭐
知识点:封装(private、setter/getter)、this 关键字、合法性校验
定义一个 Emp(员工)类,要求对属性进行封装:
私有属性:
| 属性 | 类型 | 说明 |
|---|---|---|
id |
String | 员工编号 |
name |
String | 员工姓名 |
salary |
double | 薪资(元) |
公有方法要求:
this 区分)setSalary(double salary) 中,如果薪资小于 0,输出"薪资不能为负数!",否则正常赋值work() —— 输出"工号 xxx 的员工 xxx 正在工作……"测试要求:
main 方法中创建 Emp 对象work() 方法示例代码框架:
/**
* @author 你的姓名
* @title 题目2:员工信息封装
* @create 2026/7/20
*/
public class Demo_02_姓名 {
public static void main(String[] args) {
Emp emp = new Emp();
// 通过 setter 赋值
// 测试非法薪资
// 调用 work 方法
// 通过 getter 输出信息
}
}
class Emp {
private String id;
private String name;
private double salary;
// 请补全 getter/setter 方法(使用 this 区分同名参数)
// 补全 work() 方法
}
💡 提示:当 setter 参数名与成员变量同名时,
this.成员变量 = 参数;是标准写法,不能省略this。
难度:⭐⭐⭐
知识点:方法 4 种声明方式综合、质数算法、回文数算法、Random 随机数
定义一个 MathTools 工具类,利用方法的 4 种声明方式完成以下功能:
| 方法 | 类型 | 说明 |
|---|---|---|
printPrime() |
无参无返回值 | 输出 1~100 之间的所有质数,每行输出 5 个数 |
printSum(int n, int m) |
有参无返回值 | 计算并输出 n~m 之间所有整数的累加和 |
isPalindrome(int num) |
有参有返回值 | 判断一个整数是否为回文数(正着读反着读一样),返回 true/false |
getLuckyNumber() |
无参有返回值 | 使用 Random 生成一个 1~100 之间的幸运数字并返回 |
要求:
main 方法中调用上述 全部 4 个方法,验证功能isPalindrome() 需测试至少 3 个数(如 12321、12345、1221)示例运行效果:
1~100 之间的质数:
2 3 5 7 11
13 17 19 23 29
...(省略)
97
n~m 累加和:1 + 2 + ... + 100 = 5050
12321 是回文数:true
12345 是回文数:false
1221 是回文数:true
您的幸运数字是:88
示例代码框架:
/**
* @author 你的姓名
* @title 题目3:方法重用的综合计算
* @create 2026/7/20
*/
public class Demo_03_姓名 {
public static void main(String[] args) {
// 调用 printPrime() 输出质数
// 调用 printSum(1, 100) 计算累加和
// 调用 isPalindrome() 测试回文数
// 调用 getLuckyNumber() 获取幸运数字
}
// 1. 无参无返回值:输出 1~100 质数
public static void printPrime() {
// 补全代码
}
// 2. 有参无返回值:计算 n~m 累加和
public static void printSum(int n, int m) {
// 补全代码
}
// 3. 有参有返回值:判断回文数
public static boolean isPalindrome(int num) {
return false; // 补全代码
}
// 4. 无参有返回值:获取幸运数字
public static int getLuckyNumber() {
return 0; // 补全代码
}
}
💡 提示:
- 质数:大于 1 且只能被 1 和自身整除的数
- 回文数:将数字转为字符串,用
charAt()从两端比较;或用数学方法反转数字后与原数比较- 质数优化:只需要检查到
Math.sqrt(n)即可
难度:⭐⭐⭐
知识点:数组作为方法参数、冒泡排序、选择排序、插入排序、Arrays.toString()
定义一个 SortUtils 排序工具类,将三种排序算法分别封装为有参无返回值的方法:
| 方法 | 说明 |
|---|---|
bubbleSort(int[] arr) |
冒泡排序(升序),带提前结束优化 |
selectionSort(int[] arr) |
选择排序(降序),每轮选最大值 |
insertionSort(int[] arr) |
插入排序(升序),分为已排序和未排序两部分 |
要求:
"排序前:" + Arrays.toString(arr),排序后再输出 "排序后:" + Arrays.toString(arr)main 方法中创建一个测试数组,分别调用三种排序方法示例运行效果:
======= 冒泡排序(升序) =======
排序前:[29, 10, 14, 37, 13, 33, 48, 22]
排序后:[10, 13, 14, 22, 29, 33, 37, 48]
======= 选择排序(降序) =======
排序前:[29, 10, 14, 37, 13, 33, 48, 22]
排序后:[48, 37, 33, 29, 22, 14, 13, 10]
======= 插入排序(升序) =======
排序前:[29, 10, 14, 37, 13, 33, 48, 22]
排序后:[10, 13, 14, 22, 29, 33, 37, 48]
示例代码框架:
import java.util.Arrays;
/**
* @author 你的姓名
* @title 题目4:数组排序工具类
* @create 2026/7/20
*/
public class Demo_04_姓名 {
public static void main(String[] args) {
int[] arr = {29, 10, 14, 37, 13, 33, 48, 22};
// 调用冒泡排序(每次用原数组副本)
System.out.println("======= 冒泡排序(升序) =======");
bubbleSort(Arrays.copyOf(arr, arr.length));
// 调用选择排序
System.out.println("======= 选择排序(降序) =======");
selectionSort(Arrays.copyOf(arr, arr.length));
// 调用插入排序
System.out.println("======= 插入排序(升序) =======");
insertionSort(Arrays.copyOf(arr, arr.length));
}
// 1. 冒泡排序(升序 + 提前结束优化)
public static void bubbleSort(int[] arr) {
System.out.println("排序前:" + Arrays.toString(arr));
// 补全冒泡排序代码(使用 boolean 标记优化)
System.out.println("排序后:" + Arrays.toString(arr));
}
// 2. 选择排序(降序:每轮选最大值放前面)
public static void selectionSort(int[] arr) {
System.out.println("排序前:" + Arrays.toString(arr));
// 补全选择排序代码(降序)
System.out.println("排序后:" + Arrays.toString(arr));
}
// 3. 插入排序(升序)
public static void insertionSort(int[] arr) {
System.out.println("排序前:" + Arrays.toString(arr));
// 补全插入排序代码
System.out.println("排序后:" + Arrays.toString(arr));
}
}
💡 提示:
- 使用
Arrays.copyOf(原数组, 长度)创建数组副本,避免改变原数组- 冒泡排序的提前结束优化:用一个
boolean标记本轮是否有交换- 选择排序降序:每轮选出最大值放到未排序部分的最前面
| 题目 | 文件名 | 示例 |
|---|---|---|
| 题目 1 | Demo_01_姓名.java |
Demo_01_张三.java |
| 题目 2 | Demo_02_姓名.java |
Demo_02_张三.java |
| 题目 3 | Demo_03_姓名.java |
Demo_03_张三.java |
| 题目 4 | Demo_04_姓名.java |
Demo_04_张三.java |
每个 Java 源文件顶部必须包含以下注释模板:
/**
* @author 你的姓名
* @title 题目X:题目名称
* @create 2026/7/20
*/
提交\
└─ 姓名\
├─ Demo_01_姓名.java
├─ Demo_02_姓名.java
├─ Demo_03_姓名.java
└─ Demo_04_姓名.java