Search code examples
javainheritanceinitializationclassloader

How JVM loads parent classes in Java


Code:

class A {
    static {
        System.out.println("loading A static 1");
    }
    static {
        System.out.println("loading A static 2 B.c= "+B.c);        
    }
    static {
        System.out.println("loading static 3");
    }
    static int a=10; 
    A(){        
    }
}

class B extends A{
    static {
       System.out.println("loading B A.a= "+A.a);
    }
    static int c = 50;
}
public class Test {
    public static void main(String[] args) {
        new B();
    }
}

Output:

loading A static 1
loading A static 2 B.c= 0
loading static 3
loading B A.a= 10

From this out put can we say that the parent class loads after the child class but child class initialize after the parent class? If so how JVM loads class hierarchies?


Solution

  • You can check this by executing it with java -verbose Test:

    ...
    [Loaded A from file:/.../src/main/java/]
    [Loaded B from file:/.../src/main/java/]
    loading A static 1
    loading A static 2 B.c= 0
    loading static 3
    loading B A.a= 10
    ...
    

    So no, the parent class is loaded first too.