java - 创建一个与另一个与原始对象有关系的对象有什么含义?

标签 java performance object memory-leaks reference

这个问题的措辞有点奇怪。我不确定如何正确地表达这个问题,但这里有一个我所指的例子。

假设我有一个名为 Student 的类(class)。

public class Student {
    private int id;
    private String name;
    private Teacher teacher;
    private GradeLevel gradeLevel;

    public Student(int id, String name, Teacher teacher, GradeLevel gL) {
        this.id = id;
        this.name = name;
        this.teacher = teacher;
        this.gradeLevel = gL;
    }
}

在我的教师类(class)中,我希望所有学生都有这位老师。

public class Teacher {
    private int id;
    private String name;
    private List<Student> students;

    public Teacher(int id, String name) {
        this.id = id;
        this.name = name;
        this.teacher = teacher;
        updateStudents();
    }

   public void updateStudents() {
       Connection con = null
       PreparedStatement statement = null;
       ResultSet rs = null;

       try {
           con = DriverManager.getConnection(URL, USERNAME, HOST);

           statement = con.prepareStatement("SELECT * FROM students WHERE teacher_id = ?");
           statement.setInt(this.id);

           rs = statement.executeQuery();

           students = new ArrayList<>();

           while(rs.next()) {
               Student student = new Student(rs.getInt(1), rs.getString(2), this, rs.getString(3));
               students.add(student);
           }
       } catch (SQLException e) {
           students = null;
       } finally {
           rs.close();
           statement.close();
           con.close();
       }
   }
}

通过将 Teacher 对象添加到新的 Student,我是否创建了一个重复对象,或者只是对原始对象的引用?这是最好的方法还是有更好的方法?这种方法有什么问题(如果有的话)?

任何帮助或建议将不胜感激。

最佳答案

在 Java 中使用“this”时,您将传递对执行代码的对象的引用。这意味着您不会为每个学生创建新的教师对象,而是将教师的引用传递给学生对象。我也不认为有更好的方法来解决你的“问题”。对我来说看起来不错的代码。 :) 希望这能澄清这一点。

(一般来说,Java遵循按引用分配的原则,详细说明请参见here。)

关于java - 创建一个与另一个与原始对象有关系的对象有什么含义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60623914/

相关文章:

java - 如何构建 SonarQube Java 插件以从错误修复中受益,而不必等待发布完成?

java - 访问可执行 jar 中的文件和文件夹

python - 为什么 Python MySQLdb 中的 executemany 很慢?

java - 字符串压缩: Passing Object Through URL

java - 不使用InputStream更新Java Apache POI中的现有Excel文件

c++ - 哪个处理器的成本更高?

java - 我在缩放使用 View 的基于H2的Java应用程序时遇到问题

Java 对象优先级队列::检查对象成员的方法?

javascript - 从多个文件加载多个 JSON 对象

java - 将 PowerMockRunner 与 Junit 测试套件结合使用