Main content:
1 Java initialization sequence without inheritance
2 initialization sequence in case of Java inheritance
Java initialization order without inheritance
1 classSample2 {3 Sample (String s)4 {5 System.out.println (s);6 }7 Sample ()8 {9System.out.println ("The sample default constructor is called");Ten } One } A classtest{ -StaticSample sam=NewSample ("Static member Sam initialization"); -Sample sam1=NewSample ("SAM1 member initialization"); the Static{ -System.out.println ("Static Block Execution"); -if(sam==NULL) System.out.println ("Sam is null"); -sam=NewSample ("Initialize SAM member variable in static block"); + } - Test () + { ASystem.out.println (the "test default constructor is called"); at } - } - //Main function - PublicStaticvoidMain (String str[]) - { -Test a=NewTest (); in}
View Code
The output is:
Static member of SAM initialization-----static member initialization
Static block execution-----block execution
static block initialization of SAM member variables----static block execution
SAM1 member Initialization-----normal member initialization
The test default constructor is called-----constructor executes
The conclusion can be drawn from this:
A static member variable is initialized first (note thatstatic can be seen as a static member in the order in which it is executed and in the order in which it is declared in the class)
b Normal Member initialization
C executes the constructor.
for static members (a static block can be seen as a normal, statically member, it is not necessarily executed first at class initialization ) and ordinary members, whose initialization order is only related to the order in the class definition, regardless of other factors.
For example, the following example:
1 classtest{2Static{3System.out.println ("Static block 1 Execution");4 }5StaticSample staticsam1=NewSample ("Static member StaticSam1 initialization");6Sample sam1=NewSample ("SAM1 member initialization");7StaticSample staticsam2=NewSample ("Static member StaticSam2 initialization");8Static{9System.out.println ("Static Block 2 Execution");Ten } One Test () A { -System.out.println (the "test default constructor is called"); - } theSample sam2=NewSample ("SAM2 member initialization"); -}
View Code
The result is:
Static Block 1 execution
Static member STATICSAM1 initialization
Static member STATICSAM2 initialization
Static Block 2 execution
--------Static Members
SAM1 member Initialization
SAM2 member Initialization
--------Ordinary Members
The test default constructor is called
--------Constructors
initialization sequence in case of Java inheritance
1 classSample {2 Sample (String s) {3 System.out.println (s);4 }5 6 Sample () {7System.out.println ("The sample default constructor is called");8 }9 }Ten One classTest { A Static { -System.out.println ("Parent class static block 1 Execution"); - } the - StaticSample staticSam1 =NewSample ("parent class static member StaticSam1 initialization"); -Sample sam1 =NewSample ("Parent class SAM1 member initialization"); - StaticSample staticSam2 =NewSample ("parent class static member StaticSam2 initialization"); + - Static { +System.out.println ("Parent class static block 2 Execution"); A } at - Test () { -System.out.println ("Parent class test default constructor is called"); - } - -Sample sam2 =NewSample ("Parent class SAM2 member initialization"); in } - to classTestSubextendsTest { + StaticSample staticsamsub =NewSample ("Subclass Static member Staticsamsub initialization"); - the testsub () { *System.out.println ("Subclass TestSub default constructor is called"); $ }Panax Notoginseng -Sample sam1 =NewSample ("Subclass SAM1 member initialization"); the StaticSample staticSamSub1 =NewSample ("Subclass Static member StaticSamSub1 initialization"); + A Static { theSystem.out.println ("sub-class static block execution"); + } - $Sample sam2 =NewSample ("Subclass SAM2 member initialization"); $}
View Code
Execution Result:
Parent Class static block 1 execution
Parent Class Static member STATICSAM1 initialization
Parent Class Static member STATICSAM2 initialization
Parent class static block 2 execution
Initializes a static member--------the parent class
sub-class Static member staticsamsub initialization
sub-class Static member STATICSAMSUB1 initialization
sub-class static block execution
Class-------a subclass static member.
Parent Class SAM1 member initialization
Parent Class SAM2 member initialization
Parent Class The test default constructor is called
-------the normal member initialization and constructor execution of the parent class
Subclass SAM1 Member initialization
Subclass SAM2 Member initialization
sub-class TestSub the default constructor is called
-------the normal member initialization and constructor execution of the parent class
This results in Java Initialization Order Conclusion:
1 initialization of all static members of the inheritance system (late Father class, later subclass)
2 initialization of the parent class is complete (initialization of the normal member----constructor call)
3 Subclass initialization (normal member---constructors)
JAVA Initialization Order
Java Initialization Order