我对编程领域还很陌生,我正在尝试系统地学习 Java,目前正在学习 Swing。我想我明白了 void 方法的作用和用途,但我无法理解这段示例代码(摘自 http://docs.oracle.com --BorderLayoutDemo):
public class BorderLayoutDemo {
public static void addComponentsToPane(Container pane) {
JButton button = new JButton("Button 1 (PAGE_START)");
pane.add(button, BorderLayout.PAGE_START);
}
private static void createAndShowGUI() {
JFrame frame = new JFrame("BorderLayoutDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
**addComponentsToPane(frame.getContentPane());**
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
createAndShowGUI();
}
}
为什么这段代码有效,会产生一个带有 1 个按钮的窗口(我预计这只会产生一个空窗口)。是否将frame.getContentPane() 作为参数复制到addComponentsToPane() 并在该void 方法结束时销毁(未添加到框架中)?为什么它不应该返回一个 Container 对象或 JPanel 对象,然后可以将其添加到框架中(即frame.add())。
(问题已编辑。pivot 关键字是 void,而不是 static。我发现我已经被教导了这个概念(void 方法)和原始类型,这使问题变得困惑)
最佳答案
该对象通过引用传递并且不被复制。 Java 通过引用而不是通过值传递对象,就像您在 C 等语言中所习惯的那样。因此,您使用 addComponentsToPane(frame.getContentPane());
传递的是对框架的内容 Pane 。
然后,静态方法使用该引用将按钮添加到实际内容 Pane 。对象不被复制是有充分理由的。例如,想象一下创建一个包含大量数据的类。每次将此类传递给函数时都复制此类是没有意义的。
对于 Java 中的“原始”类型,例如“int”或“double”,有一个异常(exception)。它们的处理方式与您在 C/C++ 中学到的方式相同。但是请记住,Integer 和 Double 是类。
希望有帮助!
关于java - 使用 void 方法添加按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13209082/