我正在制作一个乘法时间攻击程序,目前处于非常早期阶段。我将它拆分为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;
}
答案 0 :(得分:4)
不,对象实际上是对象的引用。引用按值传递给方法(例如,它是对象引用的副本,而不是对象本身的副本)。
这在实践中意味着上面的案例中只有一份数据副本,所以无需担心额外的内存。
就您的班级设计是对还是错而言,最重要的是将逻辑与演示文稿分开。这听起来像是你在正确的轨道上,但是阅读MVC(模型视图控制器)并没有什么坏处,因为这是这类问题的常见模式。
答案 1 :(得分:1)
类通过Java中的指针传递。
它实际上传递了一个指向对象的指针,而不是它的副本。