创建类的对象时,“ this”指的是哪里?

时间:2019-10-13 11:17:45

标签: java swing

我是Java的初学者,如果这个问题看起来有点愚蠢,请对不起

我有这个简单的代码,但是我不理解其中的一些代码。

我知道关键字this指向此类,但是我仍然不明白为什么需要这么做。

例如:

public class SquareSimp
{


    public static void main( String[] args )
    {
        FilledFrame frame = new FilledFrame();

        frame.setVisible( true );
    }
}

class FilledFrame extends JFrame
{
    int size = 400;

    public FilledFrame()
    {
        JButton butSmall   = new JButton("Small");
        JButton butMedium  = new JButton("Medium");
        JButton butLarge   = new JButton("Large");
        JButton butMessage = new JButton("Say Hi!");

        SquarePanel panel = new SquarePanel(this); WHERE DOES (THIS) REFER TO 
                                                   AND WHY DO WE NEED IT?
        JPanel butPanel = new JPanel();

        butPanel.add(butSmall);
        butPanel.add(butMedium);
        butPanel.add(butLarge);
        butPanel.add(butMessage);
        add(butPanel, BorderLayout.NORTH);
        add(panel, BorderLayout.CENTER);

        setSize( size+100, size+100 );
    }

}

class SquarePanel extends JPanel
{
    FilledFrame theApp; // WHY DO WE CREATE A VARIABLE OF A TYPE CLASS? HERE?

    SquarePanel(FilledFrame app)
    {
        theApp = app;
    }

    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.setColor(Color.green);
        g.fillRect(20, 20, theApp.size, theApp.size);
    }
}

2 个答案:

答案 0 :(得分:0)

在FilledFrame构造函数中,我们要创建一个SquarePanel实例,但事实是SquarePanel构造函数需要一个FilledFrame实例,因此,因为我们已经在首先创建FilledFrame,所以可以发送正在构造的当前FilledFrame实例作为输入到SquarePanel构造函数。

答案 1 :(得分:0)

WHERE DOES (THIS) REFER AND WHY DO WE NEED IT?

this代表该类的当前实例。 在这个例子中, JPanel 的构造函数需要一个 FilledFrame 类的实例。因此,我们传递了该实例,在本例中为 this(在main方法中创建)。

WHY DO WE CREATE A VARIABLE OF A TYPE CLASS? HERE?

在您的设计中, SquarePanel 类取决于 FilledFrame 类,因此我们必须注入一个 FilledFrame 实例。 在您的情况下,可以将其作为参数传递给您的 SquarePanel 构造函数。

我仍然认为这是不好的设计