Java class initialization order description

A class will have the following contents. When class is initialized, they are in order

  • Static properties: properties defined at the beginning of static
  • Static method block: method block circled by static {}
  • Static method: static decorated method (only effective when called)
  • Common attribute: attribute without static definition
  • Common method block: method block circled by {}
  • Normal method: normal method (only effective when called)
  • Constructor: method with the same class name

1. general category

public class LifeCycle {
    // Static attribute
    private static String staticField = getStaticField();
    // Static method block
    static {
        System.out.println(staticField);
        System.out.println("Static method block");
    }
    // Static method
    public static String getStaticField() {
        System.out.println("Static method");
        return "Static attribute";
    }
    // General attribute
    private String field = getField();
    // Common method block
    {
        System.out.println(field);
        System.out.println("Common method block");
    }
    // Common method
    public static String getField() {
        System.out.println("Common method");
        return "General attribute";
    }
    // Construction method
    public LifeCycle() {
        System.out.println("Construction method");
    }

    // Main function
    public static void main(String[] argc) {
        new LifeCycle();
    }
}


The initialization sequence is as follows

  • Static attribute
  • Static method block
  • General attribute
  • Common method block
  • Construction method

2. inheritance

public class LifeCycleFather {
    // Static attribute
    private static String staticField = getStaticField();
    // Static method block
    static {
        System.out.println(staticField);
        System.out.println("Parent static method block");
    }
    // Static method
    public static String getStaticField() {
        System.out.println("Parent static method");
        return "Parent static properties";
    }
    // General attribute
    private String field = getField();
    // Common method block
    {
        System.out.println(field);
        System.out.println("Parent common method block");
    }
    // Common method
    public static String getField() {
        System.out.println("Parent common method");
        return "Parent common property";
    }
    // Construction method
    public LifeCycleFather() {
        System.out.println("Construction method of parent class");
    }
}

public class LifeCycle extends LifeCycleFather{
    // Static attribute
    private static String staticField = getStaticField();
    // Static method block
    static {
        System.out.println(staticField);
        System.out.println("Static method block");
    }
    // Static method
    public static String getStaticField() {
        System.out.println("Static method");
        return "Static attribute";
    }
    // General attribute
    private String field = getField();
    // Common method block
    {
        System.out.println(field);
        System.out.println("Common method block");
    }
    // Common method
    public static String getField() {
        System.out.println("Common method");
        return "General attribute";
    }
    // Construction method
    public LifeCycle() {
        System.out.println("Construction method");
    }

    // Main function
    public static void main(String[] argc) {
        new LifeCycle();
    }
}


Initialization order

  • Parent static properties
  • Parent static code block
  • Subclass static properties
  • Subclass static code block
  • Parent common property
  • Parent normal code block
  • Construction method of parent class
  • Subclass common properties
  • Subclass common code block
  • Subclass construction method

Keywords: Attribute

Added by 9three on Mon, 28 Oct 2019 20:51:30 +0200