我是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);
}
}
答案 0 :(得分:2)
您不会调用paint或自行运行,但JVM中的其他代码确实会为您调用它。例如,Thread类中的代码将调用您的run方法。事件循环中的代码将调用paint或paintComponent。随着时间的推移,你会发现没有什么神奇之处。每当调用一个方法时,其他一些代码就会调用它。
答案 1 :(得分:1)
是。窗口框架为您调用paint
和paintComponent
方法。它确定何时需要绘画/重绘(例如,当窗口被移动,打开,重新打开,调整大小等时)。这些方法的Javadoc有时会提到不建议/不要求直接调用它们,但需要实现它们来执行此类操作。