构造函数不初始化变量

时间:2018-03-07 12:30:26

标签: java constructor

这是输出(对于我的例子): " 0 18" 但通常是对象"检查"类Checks在18处初始化类n的变量Checks,但这不会发生。

public class Connect6 {
    int n;

    public Connect6(int n) {
        this.n = n;
    }


    Checks checks = new Checks(n);


    public void place() {
        Terminal.printLine(checks.getN());
        Terminal.printLine(n);
    }
}

这是Check类(类main只是初始化一个对象Connect6并调用方法place):

public class Checks {
    int n;
    public int getN() {
        return n;
    }
    public Checks(int n) {
        this.n = n;
    }   

3 个答案:

答案 0 :(得分:3)

Checks checks = new Checks(n);Connect6构造函数的正文之前执行,因此n当时仍为0。在Checks初始化后,您应该在Connect6构造函数中创建n实例。

更改

public Connect6(int n) {
    this.n = n;
}


Checks checks = new Checks(n);

private Checks checks;
public Connect6(int n) {
    this.n = n;
    this.checks = new Checks(n);
}

答案 1 :(得分:2)

检查对象在构造函数调用之前已初始化

正确的代码应如下所示:

public class Connect6 {
    int n;
    Checks checks;

    public Connect6(int n) {
        this.n = n;
        this.checks = new Checks(n);
    }

    public void place() {
        Terminal.printLine(checks.getN());
        Terminal.printLine(n);
    }
}

答案 2 :(得分:1)

当您输入int n;时,它的值不是null它是0

Default Values段注意Java specs

默认int值为0