我正在创建一个简单的画一个圆使用 Canvas
以及 Paint
.
我注意到当我创建变量时 myPaint
外部 init()
,一切正常;由以下代码说明:
public class Drawing extends View {
Paint myPaint;
public Drawing(Context context) {
super(context);
init();
}
public void init(){
myPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
myPaint.setColor(Color.parseColor("yellow"));
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawCircle(getMeasuredWidth() /2, getMeasuredHeight() /2 , 100f, myPaint);
super.onDraw(canvas);
}
}
然而,当我做同样的事情,而是创造 myPaint
内部 init()
,我得到一个错误 myPaint
在 onDraw()
; 由以下代码说明:
public class Drawing extends View {
public Drawing(Context context) {
super(context);
init();
}
public void init(){
Paint myPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
myPaint.setColor(Color.parseColor("yellow"));
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawCircle(getMeasuredWidth() /2, getMeasuredHeight() /2 , 100f, myPaint);
super.onDraw(canvas);
}
}
为什么会这样?谢谢!
1条答案
按热度按时间fae0ux8s1#
在代码b中,您定义的是一个局部变量,它只能在定义它的代码块(即
init
方法)。相反,代码a定义了一个属性,该属性可以在对象内部访问,并与对象并排离开。你也可以看看这个。
示例变量在类中声明,但在方法外部声明。为堆中的对象分配空间时,将为每个示例变量值创建一个槽。示例变量包含必须由多个方法、构造函数或块引用的值,或必须在整个类中出现的对象状态的基本部分。
局部变量在方法、构造函数或块中声明。局部变量是在输入方法、构造函数或块时创建的,一旦退出方法、构造函数或块,该变量将被销毁。