全局变量和构造函数(Java)

Joh*_*ohn 1 java oop variables class

类的顶部变量何时与构造函数进行初始化?

对不起,这就是我的意思:

public class aClass {

    private int num;

    public aClass {...}
Run Code Online (Sandbox Code Playgroud)

mil*_*ose 5

默认值(null对于0原始字段的对象字段等)在技术上从未明确分配,只要涉及发出的字节码.(这是在对象实例化期间"内部"完成的,在任何初始化程序/构造函数代码运行之前.)

在编译器对类中的超类构造函数调用(如果有的话)之后,每个构造函数的开头"复制"实例字段的显式初始化代码.代码示例:

class Foo {
    int bar = 123;

    public Foo() {
        // ...
    }

    public Foo(int bar) {
        this.bar = bar;
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

被编译成等效于的字节码:

class Foo {
    int bar;

    public Foo() {
        this.bar = 123;
        // ...
    }

    public Foo(int bar) {
        this.bar = 123;

        this.bar = bar;
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

初始化程序块也是如此.这意味着执行任何普通构造函数代码之前,这些变量都会被初始化