Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对象变量-局部变量可能尚未初始化_Java_Design Patterns - Fatal编程技术网

Java 对象变量-局部变量可能尚未初始化

Java 对象变量-局部变量可能尚未初始化,java,design-patterns,Java,Design Patterns,我到处寻找这个问题。人们告诉我,我确实定义了变量,但没有初始化它。但是,如果变量是整数,我可以在开始时将其分配给0,但它是一个对象变量。分配什么 立面类别: public class CarDriveFacade { Engine engine; MusicPlayer musicPlayer; Lights lights; LockDoors doors; public CarDriveFacade(Engine engine, MusicPlaye

我到处寻找这个问题。人们告诉我,我确实定义了变量,但没有初始化它。但是,如果变量是整数,我可以在开始时将其分配给0,但它是一个对象变量。分配什么

立面类别:

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");
    }
}