Java类组织

时间:2011-07-23 20:56:53

标签: java memory-management reference

我正在制作一个乘法时间攻击程序,目前处于非常早期阶段。我将它拆分为4个类。 MainApp ,它会启动其他类并设置JFrame。 设置,显示人们选择要测试的号码的屏幕。 MainWindow ,这将是数字显示的位置和用户回答的位置。我的上一课是计算,其中提出了问题和答案。我的问题是计算需要从设置检查哪些复选框。 计算需要知道用户何时更改设置 MainWindow 需要从计算中显示哪些数字。拥有如此庞大的一类课程,或者我的班级组织是错误的,这是正常的吗?而且,由于Java通过值传递,所以不会给每个类提供另一个类的副本只是为了12个布尔数组的副本使用双倍的内存?例如。如果计算需要10 MB的数据,则不会在构造函数中显示 MainWindow 它的副本(如下所示)会导致多占用10 MB的RAM,只需要检索12位数据?

public MainWindow(Calculate calc) {

    super("Main Window");

    // Display Window
    pnlMaster = new JPanel(new BorderLayout());
    pnlLabels = CreateLabelArea();
    pnlButtons = CreateButtonArea();

    pnlMaster.add(pnlLabels, BorderLayout.CENTER);
    pnlMaster.add(pnlButtons, BorderLayout.SOUTH);
    this.getContentPane().add(pnlMaster);       

    // Handler 
    cHandler handler = new cHandler();
    btnNext.addActionListener(handler);
    btnQuit.addActionListener(handler);
    txtAnswer.addActionListener(handler);

    // Get Calculate class
    this.calc = calc;
}     

2 个答案:

答案 0 :(得分:4)

不,对象实际上是对象的引用。引用按值传递给方法(例如,它是对象引用的副本,而不是对象本身的副本)。

这在实践中意味着上面的案例中只有一份数据副本,所以无需担心额外的内存。

就您的班级设计是对还是错而言,最重要的是将逻辑与演示文稿分开。这听起来像是你在正确的轨道上,但是阅读MVC(模型视图控制器)并没有什么坏处,因为这是这类问题的常见模式。

答案 1 :(得分:1)

类通过Java中的指针传递。

它实际上传递了一个指向对象的指针,而不是它的副本。