【发布时间】:2011-10-25 06:02:22
【问题描述】:
我在下面创建了静态类,因此任何类都可以访问我的 lejos 机器人的任何传感器方法,而无需我为每个类创建一个实例。
但是,每当我调用诸如StandardRobot.motorA.setPower(100) 之类的方法时,我的机器人就会崩溃。当我使用完全相同的类并创建它的本地实例时,它工作正常。为什么是这样?两次我的代码都能正常编译并在运行时失败。
import lejos.nxt.*;
public class StandardRobot {
public static ColorSensor colourSensor;
public static TouchSensor touchSensor;
public static UltrasonicSensor ultrasonicSensor;
public static NXTMotor motorA, motorB;
public StandardRobot() {
// instantiate sensors
ultrasonicSensor = new UltrasonicSensor(SensorPort.S1);
colourSensor = new ColorSensor(SensorPort.S2);
touchSensor = new TouchSensor(SensorPort.S4);
//instantiate motors
motorA = new NXTMotor(MotorPort.A);
motorB = new NXTMotor(MotorPort.B);
}
}
【问题讨论】:
-
因为
motorA是null直到你调用构造函数。您不应该在实例构造函数中分配静态变量 -
能否请您提供一下在这种情况下崩溃意味着什么,您是否遇到异常或虚拟机崩溃?
-
这不是一个静态类。这是一个包含大量静态数据和方法的类。
标签: java static static-methods lego lejos-nxj