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