在java GUI构造函数中声明和实例化变量的优点

时间:2014-02-14 14:25:45

标签: java user-interface constructor declaration instantiation

在构造函数中声明+实例化变量的优点是什么,而不是在构造函数中声明外部和实例化,甚至在外部声明+实例化?

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);
    }
}

2 个答案:

答案 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用户界面的特殊规则。

如果必须从多个方法访问变量,或者必须在调用之间保留其值,则通常使用字段(好吧,构造函数只调用一次,因此不是这种情况)。

如果仅在一个方法中访问变量,并且在此方法返回后不再需要其值,则将这样的变量声明为字段是没有意义的。