从super()运行方法时,为什么字段未初始化为非默认值?

下巴

我肯定已经花了一个多小时试图找出某些意外行为的原因。最后,我意识到未按预期设置字段。在耸耸肩并继续前进之前,我想了解一下为什么这样做会如此。

在运行下面的示例时,我希望输出为true,但为false。其他测试表明,无论哪种类型的默认值,我总会得到。

public class ClassOne {

    public ClassOne(){
        fireMethod();
    }

    protected void fireMethod(){
    }

}

public class ClassTwo extends ClassOne {

    boolean bool = true;

    public ClassTwo() {
        super();
    }

    @Override
    protected void fireMethod(){
        System.out.println("bool="+bool);
    }

    public static void main(String[] args) {
        new ClassTwo();
    }
}

输出:

bool=false
sp00m
boolean bool = true;

public ClassTwo() {
    super();
}

等同于

boolean bool;

public ClassTwo() {
    super();
    bool = true;
}

编译器会自动在构造函数内移动字段初始化(紧接在超级构造函数调用之后,隐式或显式)。

由于布尔字段的默认值是false,当super()被调用when时(因此ClassOne()fireMethod()),bool尚未设置为true


有趣的事实:以下构造函数

public ClassTwo() {
    super();
    fireMethod();
}

将被理解为

public ClassTwo() {
    super();
    bool = true;
    fireMethod();
}

由JVM,因此输出将是

bool=false
bool=true

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么在Java中将数组初始化为默认值而不初始化为arraylist?

来自分类Dev

如果取了一个未初始化的变量的地址,它是否被初始化为默认值?

来自分类Dev

为什么零初始化不是c ++中未初始化变量的默认值?有编译器选项可以强制执行吗?

来自分类Dev

在C中,未初始化的数组中char的默认值是什么?

来自分类Dev

在C中,未初始化的布尔数组的默认值是什么?

来自分类Dev

C ++中未初始化变量的默认值是什么?

来自分类Dev

多值设置未使用默认值初始化

来自分类Dev

未初始化的枚举数默认值

来自分类Dev

未初始化变量的默认值

来自分类Dev

为什么要为此类初始化程序使用默认值None?

来自分类Dev

为什么我的字段没有初始化为我给它的值

来自分类Dev

为什么我的字段没有初始化为我给它的值

来自分类Dev

SQLAlchemy为什么将hstore字段初始化为null?

来自分类Dev

为什么将指针成员初始化为非零?

来自分类Dev

未初始化的串行端口属性是否具有使用默认构造函数时的默认值?

来自分类Dev

未将int初始化为零的类的实例变量的Java默认值

来自分类Dev

Fortran:将所有变量初始化为特定的默认值

来自分类Dev

如何将数组部分初始化为某个默认值?

来自分类Dev

将一类的默认值初始化为另一C ++

来自分类Dev

android-如何将我的单选按钮初始化为默认值

来自分类Dev

如何将结构变量初始化为默认值?

来自分类Dev

为什么Unity会忽略非静态公共字段的初始化值?

来自分类Dev

扩展App时为什么未初始化对象字段?

来自分类Dev

何时初始化默认值?

来自分类Dev

何时初始化默认值?

来自分类Dev

LinkedList 初始化时的默认值

来自分类Dev

用Ecmascript 6中省略值的默认值初始化对象的最佳方法是什么?

来自分类Dev

具有默认值但没有类型注释的函数参数的推断类型是什么?初始化为“无”的变量如何?

来自分类Dev

Java:为什么未使用XX:SurvivorRatio的默认值?

Related 相关文章

  1. 1

    为什么在Java中将数组初始化为默认值而不初始化为arraylist?

  2. 2

    如果取了一个未初始化的变量的地址,它是否被初始化为默认值?

  3. 3

    为什么零初始化不是c ++中未初始化变量的默认值?有编译器选项可以强制执行吗?

  4. 4

    在C中,未初始化的数组中char的默认值是什么?

  5. 5

    在C中,未初始化的布尔数组的默认值是什么?

  6. 6

    C ++中未初始化变量的默认值是什么?

  7. 7

    多值设置未使用默认值初始化

  8. 8

    未初始化的枚举数默认值

  9. 9

    未初始化变量的默认值

  10. 10

    为什么要为此类初始化程序使用默认值None?

  11. 11

    为什么我的字段没有初始化为我给它的值

  12. 12

    为什么我的字段没有初始化为我给它的值

  13. 13

    SQLAlchemy为什么将hstore字段初始化为null?

  14. 14

    为什么将指针成员初始化为非零?

  15. 15

    未初始化的串行端口属性是否具有使用默认构造函数时的默认值?

  16. 16

    未将int初始化为零的类的实例变量的Java默认值

  17. 17

    Fortran:将所有变量初始化为特定的默认值

  18. 18

    如何将数组部分初始化为某个默认值?

  19. 19

    将一类的默认值初始化为另一C ++

  20. 20

    android-如何将我的单选按钮初始化为默认值

  21. 21

    如何将结构变量初始化为默认值?

  22. 22

    为什么Unity会忽略非静态公共字段的初始化值?

  23. 23

    扩展App时为什么未初始化对象字段?

  24. 24

    何时初始化默认值?

  25. 25

    何时初始化默认值?

  26. 26

    LinkedList 初始化时的默认值

  27. 27

    用Ecmascript 6中省略值的默认值初始化对象的最佳方法是什么?

  28. 28

    具有默认值但没有类型注释的函数参数的推断类型是什么?初始化为“无”的变量如何?

  29. 29

    Java:为什么未使用XX:SurvivorRatio的默认值?

热门标签

归档