Java 如何使实例变量可供公共静态方法访问?
为什么我不能在Java 如何使实例变量可供公共静态方法访问?,java,Java,为什么我不能在mull类的iterate方法中访问变量p public class mull { public static void main(String[] args) throws InterruptedException { final JPanel p = createAndShowGUI(); Timer timer = new Timer(1000, new MyTimerActionListener()); timer.st
mull
类的iterate
方法中访问变量p
public class mull {
public static void main(String[] args) throws InterruptedException {
final JPanel p = createAndShowGUI();
Timer timer = new Timer(1000, new MyTimerActionListener());
timer.start();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
}
timer.stop();
public static void iterate(){
for (int i = 0; i < 55; i++){
// "p cannot be resolved"
p.moveSquare(i*10, i*10);
p.setParamsRing(i*5, i*7, 200, 200);
}
}
}
class MyPanel extends JPanel {
....
}
而不是:
p.setParamsRing(i*5, i*7, 200, 200);
?为了让静态方法看到变量,它必须是静态的或属于类的实例 非静态变量属于一个类的单个实例,您没有此类实例,因为不需要调用
new
静态变量属于类本身
您可以将变量设为静态变量,也可以创建一个实例并访问它,就像JPanel一样
mull m=new mull()代码>
m、 p.moveSquare(…)代码>
Eclipse强制您进行强制转换,因为p
被声明为JPanel
,因此它没有您可能在MyPanel
类中引入的setParamsRing()
方法。将p
声明为类的静态字段:
private static JPanel p;
静态作用域只能访问静态变量
除非将局部变量作为参数传递给第二个方法或使用全局可见性重新声明,否则无法从另一个方法访问在方法中声明的局部变量
因此,您需要的是:
public class mull {
private static final JPanel p;
}
编辑:最后一个问题:这是因为p是JPanel类型,它没有任何方法setParamsRing()。您可能在MyPanel类中添加了该方法。静态方法只能访问其他静态方法和类成员。因此,将p定义为静态
顺便说一句,您的类似乎不可编译。您可以使用以下任何方法生成代码:
Timer timer = new Timer(1000, new MyTimerActionListener());
timer.start();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
}
timer.stop();
因为p是JPanel类型,它没有任何方法setParamsRing()。来回答标题中的问题,因为它在术语上是矛盾的。
Timer timer = new Timer(1000, new MyTimerActionListener());
timer.start();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
}
timer.stop();