谁能解释一下这是如何工作的?

时间:2011-06-10 18:37:27

标签: java swing scope initializing

我有这行代码。

class ButtonPanel extends JPanel implements ActionListener
{  
    public ButtonPanel()
    {  
        yellowButton = new JButton("Yellow");

并且它有效,我认为在创建像这样的jButton实例之前,Java需要知道yellowButton的类型吗?

JButton yellowButton = new JButton("Yellow");

有人能解释一下这是如何运作的吗?

2 个答案:

答案 0 :(得分:9)

如果确实有效,那么这意味着yellowButton可能是您没有注意到的类字段。

再次检查课程。你可能拥有的更像是这样的东西:

class ButtonPanel extends JPanel implements ActionListener
{  
    private JButton yellowButton;

    public ButtonPanel()
    {  
        yellowButton = new JButton("Yellow");
        /* this.yellowButton == yellowButton */

        /* etc */
    }
}

如果在方法范围中找不到变量foo,它会自动回退到this.foo。相比之下,像PHP这样的语言没有这种灵活性。 (对于PHP,您始终必须$this->foo而不是$foo才能访问类字段。)

答案 1 :(得分:1)

它不应该工作,您总是需要声明变量的类型。你确定你在某个地方没有丢失一段代码吗?

在开始时就像这样。

private JButton yellowButton = null;