当前位置: 技术问答>java相关
JAVA初学的困惑,简单问题啊!!
来源: 互联网 发布时间:2017-04-17
本文导语: import java.awt.*; public class NotHelloWorld1 extends Frame { public boolean handleEvent(Event evt) { if (evt.id == Event.WINDOW_DESTROY) System.exit(0); return super.handleEvent(evt); } public void paint(Graphics g) { g.dr...
import java.awt.*;
public class NotHelloWorld1 extends Frame
{
public boolean handleEvent(Event evt)
{
if (evt.id == Event.WINDOW_DESTROY) System.exit(0);
return super.handleEvent(evt);
}
public void paint(Graphics g)
{
g.drawString("Not a Hello ,World program", 75, 100);
}
public static void main(String[] args)
{
Frame f = new NotHelloWorld1();
f.resize(300, 200);
f.show();
}
}
上面的代码 paint函数什么时候被执行的呢?
在我原来学C++的观点是,对象被初始化的时候只有构造函数被运行的
那上面的paint函数是怎么会被运行的呢?奇怪~~~
public class NotHelloWorld1 extends Frame
{
public boolean handleEvent(Event evt)
{
if (evt.id == Event.WINDOW_DESTROY) System.exit(0);
return super.handleEvent(evt);
}
public void paint(Graphics g)
{
g.drawString("Not a Hello ,World program", 75, 100);
}
public static void main(String[] args)
{
Frame f = new NotHelloWorld1();
f.resize(300, 200);
f.show();
}
}
上面的代码 paint函数什么时候被执行的呢?
在我原来学C++的观点是,对象被初始化的时候只有构造函数被运行的
那上面的paint函数是怎么会被运行的呢?奇怪~~~
|
paint方法被java虚拟机默认运行的观点是错误的!
JAVA是非常严谨的语言,所谓“默认运行”是有严格理由的:
实际上paint()方法的继承路径是:
java.awt.Componet->java.awt.Container->java.awt.Window
->java.awt.Frame
你上面那段代码只不过override了Frame类中的方法,而又被Frame
的Constructor调用了,也就是表面上看起来自动运行了!
JAVA是非常严谨的语言,所谓“默认运行”是有严格理由的:
实际上paint()方法的继承路径是:
java.awt.Componet->java.awt.Container->java.awt.Window
->java.awt.Frame
你上面那段代码只不过override了Frame类中的方法,而又被Frame
的Constructor调用了,也就是表面上看起来自动运行了!
|
paint方法是被java虚拟机默认运行的,相似的还有Thread中的run方法。