内置类中的方法

时间:2013-09-23 11:08:53

标签: java methods

我是java的新手。我正在阅读java代码以了解更多信息,这让我很困惑。只有在被调用时才会执行一个方法,对吗?但是那些内置类的方法如 Runnable 类中的paint()paintComponent()run()等等。这些方法是在没有显式调用它们的情况下执行的,一旦实现这些方法的类用于实例化对象?它真的是这样的吗?

例如,在此代码中,方法paint()并未真正调用。

import javax.swing.*;
import java.awt.*;

public class FrameExampleTest{
    public static void main(String args[]){
        FrameExample frame = new FrameExample();
        frame.setSize(500,500);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

class FrameExample extends JFrame{
    PanelExample panel;
    public FrameExample(){
        Container c = getContentPane();
        panel = new PanelExample();
        c.add(panel,BorderLayout.CENTER);
    }
}

class PanelExample extends JPanel{
    public PanelExample(){
        setSize(300,200);
    }

    public void paint(Graphics g){
        g.fillArc(20,20,30,30,0,360);
    }
}

2 个答案:

答案 0 :(得分:2)

您不会调用paint或自行运行,但JVM中的其他代码确实会为您调用它。例如,Thread类中的代码将调用您的run方法。事件循环中的代码将调用paint或paintComponent。随着时间的推移,你会发现没有什么神奇之处。每当调用一个方法时,其他一些代码就会调用它。

答案 1 :(得分:1)

是。窗口框架为您调用paintpaintComponent方法。它确定何时需要绘画/重绘(例如,当窗口被移动,打开,重新打开,调整大小等时)。这些方法的Javadoc有时会提到不建议/不要求直接调用它们,但需要实现它们来执行此类操作。