在构造函数中声明+实例化变量的优点是什么,而不是在构造函数中声明外部和实例化,甚至在外部声明+实例化?
public class GUIview extends JFrame {
public GUIview() {
JPanel pan = new JPanel();
JSplitPane splitPane = new JSplitPane();
}
public static void main(String[] args) {
GUIview view = new GUIview();
view.setVisible(true);
}
}
或
public class GUIview extends JFrame {
JPanel pan;
JSplitPane splitPane;
public GUIview() {
pan = new JPanel();
splitPane = new JSplitPane();
}
public static void main(String[] args) {
GUIview view = new GUIview();
view.setVisible(true);
}
}
答案 0 :(得分:0)
我认为代码缩短了,以便在这里发布。但我也假设省略了一个重要的部分 - 即将组件添加到框架或其他容器中:
public GUIview() {
JPanel pan = new JPanel();
JSplitPane splitPane = new JSplitPane();
// This was omitted
pan.add(splitPane);
this.add(pan);
}
如果这是正确的,那么一般的陈述可能是:在构造函数中声明变量的优点是你的类没有弄乱不必要的字段!
这很重要:除非您需要访问它们,否则不应将GUI组件存储为GUI类中的字段。例如:
class GUI extends JPanel
{
// This component has to be stored as a field, because
// it is needed for the "getText" method below
private JTextField textField;
public GUI()
{
// This component will just be added to this panel,
// and you don't need a reference to this later.
// So it should ONLY be declared here, locally
JLabel label = new JLabel("Enter some text:");
add(label);
textField = new JTextField();
add(textField);
}
public String getText()
{
return textField.getText();
}
}
答案 1 :(得分:0)
这里没有针对Java用户界面的特殊规则。
如果必须从多个方法访问变量,或者必须在调用之间保留其值,则通常使用字段(好吧,构造函数只调用一次,因此不是这种情况)。
如果仅在一个方法中访问变量,并且在此方法返回后不再需要其值,则将这样的变量声明为字段是没有意义的。