Java 对象变量-局部变量可能尚未初始化
我到处寻找这个问题。人们告诉我,我确实定义了变量,但没有初始化它。但是,如果变量是整数,我可以在开始时将其分配给0,但它是一个对象变量。分配什么 立面类别:Java 对象变量-局部变量可能尚未初始化,java,design-patterns,Java,Design Patterns,我到处寻找这个问题。人们告诉我,我确实定义了变量,但没有初始化它。但是,如果变量是整数,我可以在开始时将其分配给0,但它是一个对象变量。分配什么 立面类别: public class CarDriveFacade { Engine engine; MusicPlayer musicPlayer; Lights lights; LockDoors doors; public CarDriveFacade(Engine engine, MusicPlaye
public class CarDriveFacade {
Engine engine;
MusicPlayer musicPlayer;
Lights lights;
LockDoors doors;
public CarDriveFacade(Engine engine, MusicPlayer musicPlayer, Lights lights, LockDoors doors){
this.engine = engine;
this.musicPlayer = musicPlayer;
this.lights = lights;
this.doors = doors;
}
public void startCar(){
doors.close();
engine.start();
lights.on();
musicPlayer.on();
}
public void stopCar(){
musicPlayer.off();
lights.off();
engine.stop();
doors.open();
}
}
子类示例:
public class LockDoors {
LockDoors doors;
LockDoors(LockDoors doors){
this.doors=doors;
}
public void open(){
System.out.println("Doors are open");
}
public void close(){
System.out.println("Doors are closed");
}
}
发动机
在这种情况下,“引擎”不是一个对象,
它只是一个具有空值的对象引用
至少在使用对象的方法之前,必须创建对象并将其指定给对象引用。因为{null}.method()不是有效的调用。有什么原因不能将其设为
null
?线程“main”java.lang.NullPointerException中的异常:无法调用“LockDoors.close()”,因为“this.doors”为null,以避免编译器发出未初始化的投诉。显然,在使用变量之前,您需要为变量指定一个实际值。@KorayBarkin,可能是一个引擎?!根据engage
类的不同,它可能简单到Engine-Engine=new-Engine()代码>(如果类具有不带参数的构造函数)。如果构造函数需要参数,您必须提供它们(类似于新的CarDriveFacade(引擎、音乐播放器、灯光、门)
),您甚至不需要为原始数据类型分配一个值,这只适用于字段,不适用于局部变量。错误消息是OP get是关于变量的。@ThomasKläger关于局部变量你是对的。我将改变我的评论。
public class LockDoors {
LockDoors doors;
LockDoors(LockDoors doors){
this.doors=doors;
}
public void open(){
System.out.println("Doors are open");
}
public void close(){
System.out.println("Doors are closed");
}
}