1. 案例中哪里体现出了封装性及其好处
202321336082 眭李晟涛
student类,StudentManagementSystem类中将信息
(name,age,gender,id,major,gpa) ArrayList类封装
通过控制对类成员的访问,封装性可以防止外部代码直接修改对象的内部状态,
从而避免潜在的错误和安全问题。
封装性使得类的内部实现可以在不改变其外部接口的情况下进行修改和重构。
这有助于在不影响现有代码的情况下添加新功能或修复错误。2. 案例中的setter/getter模式与封装性
2. 案例中的setter/getter模式与封装性
202321336088 李明宇
- Setter方法:用于设置(修改)对象的属性值。通常返回
void
类型,并接受一个与属性类型相同的参数。 - Getter方法:用于获取(访问)对象的属性值。通常返回属性的类型,并不接受任何参数。
- 用途
-
封装:通过使用setter和getter,可以将数据隐藏起来,只允许通过这些方法来访问或修改。这样可以保护数据不被外部代码直接访问或篡改,有助于实现信息隐藏。
-
控制访问:可以在setter中加入逻辑来限制设置的数据值,例如进行有效性检查、范围限制等。同样地,在getter中也可以执行一些额外的操作,比如格式化输出或者懒加载数据。
-
保持灵活性:如果未来需要改变某个属性的行为,比如添加额外的日志记录、性能监控或是业务逻辑,只需要更改相应的setter/getter方法,而不需要改动所有引用该属性的地方。
-
自动生成
-
在idea中
-
右键单击类体,点击Generate(或Alt+lnsert)
-
选择setter and getter3. 案例中某些类的toString()方法.
3. 案例中某些类的toString()方法
202321336089 王伟杰
List<Student> studentList = sms.getStudents();
if (studentList.size() == 0) {
System.out.println("The System Data is empty Now!");
break;
} else {
Iterator var23 = studentList.iterator();
while(true) {
if (!var23.hasNext()) {
continue label80;
}
Student studentItem = (Student)var23.next();
System.out.println(studentItem.toString());
}
}
在这段代码中,System.out.println(studentItem.toString());
调用 toString()
方法并将结果打印到控制台并输出结果。
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
", id='" + id + '\'' +
", major='" + major + '\'' +
", gpa=" + gpa +
'}';
}
toString()
方法是为 Student
类重写的,目的是提供一个清晰且易读的字符串表示形式。
toString()
方法的作用
-
调试和日志记录:
- 在开发过程中,
toString()
方法可以帮助开发者快速查看对象的状态。例如,在调试时打印对象的内容,或者在日志中记录对象的信息。
- 在开发过程中,
-
用户界面显示:
- 当需要将对象的信息展示给用户时,
toString()
方法可以提供一个简洁且易读的字符串表示。这在控制台输出、GUI 显示或报告生成等场景中非常有用。
- 当需要将对象的信息展示给用户时,
-
默认行为覆盖:
- 默认情况下,Java 的
Object
类中的toString()
方法返回的是对象的类名和哈希码值(如ClassName@hashCode
)。这种形式的输出通常对人类来说不是很有意义。通过重写toString()
方法,可以自定义对象的字符串表示形式。
- 默认情况下,Java 的
toString一般应包含什么内容
- 通常以类名为开头,这样可以清楚地知道输出的是哪个类的对象。
- 包括对象的所有重要属性或字段。这些是定义对象状态的核心数据。
- 如果某些字段是敏感信息(如密码、个人身份信息等),则不应在
toString()
方法中显示它们。 -
输出应该是易读且格式良好的。使用适当的分隔符(如逗号、空格)和标签(如键值对)可以使输出更加清晰。可以考虑使用 JSON 格式或类似的结构化字符串格式,这使得输出更易于阅读和解析。
toString()方法从哪里来
toString()
方法是 Java 中 Object
类的一个方法。所有在 Java 中定义的类都默认继承自 Object
类,因此每个对象都可以调用 toString()
方法。
4. 案例中几个常用方法解析
202321336082 眭李晟涛
student类
public class Student {
private String name;
private int age;
private String gender;
private String id;
private String major;
private double gpa;
Student
类定义了一个学生对象,包含了学生的姓名、年龄、性别、ID、专业和GPA等属性
public Student(String name, int age, String gender, String id, String major, double gpa) {
this.name = name;
this.age = age;
this.gender = gender;
this.id = id;
this.major = major;
this.gpa = gpa;
用于初始化 Student
类的对象。这个构造函数接收六个参数,并将这些参数赋值给类的成员变量。
public String toString() {
return "Student{name='" + this.name + '\'' + ", age=" + this.age + ", gender='" + this.gender + '\'' + ", id='" + this.id + '\'' + ", major='" + this.major + '\'' + ", gpa=" + this.gpa + '}';
}
}
toString方法覆盖Object类中的toString将学生信息以固定形式输出。
StudentManagementSystem类
public List<Student> searchByMajor(String major) {
List<Student> result = new ArrayList();
Iterator var4 = this.students.iterator();
while(var4.hasNext()) {
Student student = (Student)var4.next();
if (student.getMajor().equals(major)) {
result.add(student);
}
}
return result;
}
通过循环遍历students寻找并传入数据name相同的学生
5. 案例中的面向对象设计
202321336082 眭李晟涛
5.1 尝试用一段话描述案例所解决的问题。找到其中的名词与动词
设计了一个学生管理系统实现学生信息的添加,删除,管理,查找,还有一系列的学生信息修改信息。
5.2 如果让你设计,根据上面的分析你会抽象出什么类?各具备什么功能
Student类用于学生信息的保存,将姓名,性别,学号,年龄等
StudentManagementSystem类用于学生信息的删除,修改与更新。