import java.applet.*;
import java.awt.*;
public class Boy extends Applet
{
public void paint(Graphics g)
{
g.setColor(Color.red);
g.drawString("我一边喝着咖啡,一边学着java呢“,5,30)
}
}
Graphics声明的对象g是形参,没有接收对象,g怎么可以调用setColor( ),drawString( )?
void paint方法是自己定义的还是继承的?
------解决方案--------------------
调用者调用paint的时候,传递了一个Graphics对象,当然可以对其进行setColor等操作。。
别管什么形参实参的,特别是那种渣渣入门书说一大堆废话,一定要用专有名词把简单的东西搞复杂,你把函数调用原理搞清楚了,根本不需要去想什么形参实参的概念
------解决方案--------------------
首先一个方法就是要干点什么事情,如果有形参,那就是要对这个形参干点什么,
如paint方法形参为Graphics g ,那就是说我paint方法有对Graphics类型对象进行操作的能力,
paint方法写出来只是表明它有这个能力,而要操作具体的对象时,你必须产生一个实际的对象g1,然后调用paint方法
把g1做实参传递给形参,
就是说方法写出来只是说它有某种功能,paint方法就是有画的功能,但是你给我各种各样的画笔(如:毛笔,铅笔,钢笔,这就是形参得到的实参不同了),我画出来的东西不一样。
------解决方案--------------------
你感觉就是一个对象没有初始化怎么可以被使用是不是,觉得违反语法规则,应该报错是不是,
首先程序规定方法就是怎么写的,为什么叫形参,又为什么叫实参
一个方法写在那里,你真正要用它时,你是必须先调用它的,调用的时候()里面写实参,这样方法里面操作的就是这个实参了
如果形参也必须是一个具体的有值有真相的实参,那这个方法就只能处理一个具体的对象了,要他有毛用。
------解决方案--------------------
在这个例子中,要在【调用方法的之前new出实例对象】来
在方法当中,形参看起来没有接收实例对象,
形参调用的是【调用方法的之前new出来的实例对象】的方法
Graphics是类,里面有setColor()和drawString()的定义【亦或者继承自其父类】
g是Graphics类的对象,所以g可以调用setColor()和drawString()方法
其执行结果,对【调用方法的之前new出来的实例对象】起作用
------解决方案--------------------
paint方法由Applet自己调用,Eclipse里右键选择Open Call Hierarchy可以看到这个方法被哪些方法调用了
------解决方案--------------------
java非常非常多东西细节完全封装,你要打破砂锅追寻到每一个根源,那要累死你的,像什么面板,窗口,画笔,相应的方法,全部都已经由前辈写好了,你只要会用,可以产生效果就行,当然由于不是自己写的东西,不搞明白觉得很不自在,觉得理解有障碍,呵呵。要完全搞明白,以现在的能力,完全没必要,也没能力,浪费时间精力,你还有非常多的东西要学呢,你的目的是开发项目,不是研究原理,这些东西你只要做到心中有数,下次我知道怎么用就可以了。时间可是不等人的哦。
------解决方案--------------------
paint()是重写的方法 JPanel继承JComponent JComponent 中有一个paint()方法 你代码中的paint方法就是重写了这个爷爷JComponent 中的paint()方法 repaint()方法每次被调用时都会调用paint()方法,
也就是说paint()是画,repaint()也是画,它里面调用了paint(),
------解决方案--------------------
进来学习一下