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(""); // 触发校验 } }