Java Initialization Order

Source: Internet
Author: User
Tags class definition

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

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.