【发布时间】:2014-06-10 11:04:07
【问题描述】:
我对java(和一般编程)非常陌生,我试图制作一个简单地在屏幕中心画一条垂直线的程序。为此,我创建了一个变量x,它为我提供了屏幕中心的 x 坐标。我希望能够在其他私有方法中使用这个变量。然而,当我运行代码时,没有出现任何行,好像 x 被设置为 0。
import acm.graphics.*;
import acm.program.*;
import java.awt.*;
public class Target extends GraphicsProgram {
int x = getWidth()/2;
public void run() {
GLine line = new GLine (x,0,x,300);
add (line);
}
}
如果我把我的变量x 放在下面的run() 方法中,这条线会正确绘制,但是我稍后将无法在其他私有方法中使用它,因为据我了解,然后变量将不再是类变量而是实例变量,因此只能由run() 访问,而不能由其他方法访问?
public class Target extends GraphicsProgram {
public void run() {
int x = getWidth()/2;
GLine line = new GLine (x,0,x,300);
add (line);
}
}
有人能告诉我为什么第一个代码不起作用而第二个代码起作用吗? 非常感谢您!
【问题讨论】:
-
我相信这与图形的生命周期有关。必须在实例初始化程序运行后设置宽度。
-
@Sotirios Delimanolis 谢谢你的回答,但我想我不太明白。如果“生命周期”是指图形在一段时间后“过期”(如果我假设错误,请纠正我,请原谅我的外行语言),为什么不能将 getWidth() 的当前值分配给 x 和完成了吗?不过感谢您的快速回复!
-
正如 zjor 在下面回复的那样,GUI API 必须先实例化您的类,然后才能为其字段分配任何值。
getWidth()在实例字段初始化表达式将在 GUI 框架可以做任何事情之前运行,即。还不能设置宽度。
标签: java class variables inner-classes acm.graphics