Global variables and constructor(Java)

class, java, oop, variables

Solution

Default values (`null` for object fields, `0` etc. for primitive fields`) are technically never explicitly assigned as far as the emitted bytecode is concerned. (This is done "internally" during object instantiation, before any initializer/constructor code runs.)

Explicit initializer code for instance fields is "copied" at the start of every constructor, after a superclass constructor call (if there is any) in the class by the compiler. The code sample:

class Foo {
    int bar = 123;

    public Foo() {
        // ...
    }

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

is compiled into bytecode equivalent to:

class Foo {
    int bar;

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

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

        this.bar = bar;
        // ...
    }
}

Same goes for initializer blocks. This means these variables get initialised before any normal constructor code executes.

Problem

When are variables at the top of the class initialized in comparison to the constructor? Sorry, this is what I meant: ``` public class aClass { private int num; public aClass {...} ```

Original source

Related problems