Files
gc-plan/week1/day05/Student.java
2026-04-29 23:45:17 +08:00

118 lines
3.3 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package day05;
/**
* 第 5 天:面向对象(上)—— 类与对象、封装
* 目标:掌握如何定义一个类,如何创建和使用对象
*
* 重点:
* private 成员变量 + public getter/setter = 封装
* 构造方法 = 初始化对象的快捷方式
* this = 区分成员变量和局部变量
*/
// ==================== Student 类定义 ====================
class Student {
// 1. 私有成员变量(封装:外部不能直接访问)
private String name;
private int age;
private String studentId; // 学号
// 2. 构造方法(与类同名,无返回值)
// 无参构造
public Student() {
this.name = "未知";
this.age = 0;
this.studentId = "未分配";
}
// 有参构造(支持创建对象时直接赋值)
public Student(String name, int age, String studentId) {
this.name = name;
this.age = age;
this.studentId = studentId;
}
// 3. Getter / Setter公开的访问入口
public String getName() {
return name;
}
public void setName(String name) {
// 可以在 setter 里加校验逻辑
if (name == null || name.trim().isEmpty()) {
System.out.println("⚠ 姓名不能为空!");
return;
}
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age < 0 || age > 150) {
System.out.println("⚠ 年龄不合理!");
return;
}
this.age = age;
}
public String getStudentId() {
return studentId;
}
public void setStudentId(String studentId) {
this.studentId = studentId;
}
// 4. 行为方法
public void study(String subject) {
System.out.println(name + " 正在学习 " + subject + "");
}
public void takeExam(String subject) {
System.out.println(name + "(学号:" + studentId + ")正在参加 " + subject + " 考试。");
}
public void introduce() {
System.out.println("-----------------------------------");
System.out.println("自我介绍:");
System.out.println(" 姓名:" + name);
System.out.println(" 年龄:" + age + "");
System.out.println(" 学号:" + studentId);
System.out.println("-----------------------------------");
}
}
// ==================== 测试类 ====================
class StudentTest {
public static void main(String[] args) {
System.out.println("========== 面向对象练习 ==========\n");
// 1. 使用无参构造 + setter 创建对象
Student s1 = new Student();
s1.setName("张三");
s1.setAge(20);
s1.setStudentId("2024001");
s1.introduce();
s1.study("Java");
s1.takeExam("面向对象程序设计");
// 2. 使用有参构造直接创建
Student s2 = new Student("李四", 22, "2024002");
s2.introduce();
// 3. 创建第三个学生
Student s3 = new Student("王五", 19, "2024003");
s3.introduce();
s3.study("数据结构");
// 4. 演示数据校验
System.out.println("\n--- 测试 data 校验 ---");
s3.setAge(-5); // 触发校验
s3.setName(""); // 触发校验
}
}