JAVA initialization sequence

Main contents:

1 Initialization order of JAVA without inheritance

Initialization order in case of 2 JAVA inheritance

JAVA initialization sequence without inheritance

 1 class Sample
 2 {
 3       Sample(String s)
 4       {
 5             System.out.println(s);
 6       }
 7       Sample()
 8       {
 9             System.out.println("Sample The default constructor is called");
10       }
11 }
12 class Test{
13       static Sample sam=new Sample("Static member sam Initialization");
14       Sample sam1=new Sample("sam1 Membership initialization");
15       static{
16             System.out.println("static Block execution");
17             if(sam==null)System.out.println("sam is null");
18             sam=new Sample("Initialization in static block sam Member variables");
19             }
20       Test()
21       {
22             System.out.println("Test The default constructor is called");
23       }
24 }
25 //Main function
26  public static void  main(String  str[])
27 {
28      Test a=new Test();
29  }

The output results are as follows:

Static member sam initialization - - - static member initialization

static Block Execution -- static Block Executed

Initialization of sam member variables within static blocks -- static block execution

Sa1 member initialization - - - ordinary member initialization

Test default constructor called - - - constructor execution

It can be concluded that:

A. Static member variables are initialized first (note that Static can be seen as a static member whose execution order depends on the order it declares in the class)

b Ordinary member initialization

c executes the constructor.

 

For static members (static blocks can be regarded as ordinary static members, which are not necessarily executed first in class initialization) and ordinary members, their initialization order is only related to their order in class definition, and has nothing to do with other factors.

For example, the following example:

 1 class Test{
 2       static{
 3             System.out.println("static Block 1  implement");
 4             }
 5       static Sample staticSam1=new Sample("Static member staticSam1 Initialization");
 6       Sample sam1=new Sample("sam1 Membership initialization");
 7       static Sample staticSam2=new Sample("Static member staticSam2 Initialization");
 8       static{
 9             System.out.println("static Block 2  implement");
10             }
11       Test()
12       {
13             System.out.println("Test The default constructor is called");
14       }
15       Sample sam2=new Sample("sam2 Membership initialization");
16 }

The results are as follows:

static Block 1 Execution

Initialization of static member staticSam1

Static member staticSam2 initialization

static block 2 executes

Static Members

sam1 member initialization

sam2 member initialization

Ordinary Members

Test default constructor called

Constructor

Initialization order in case of JAVA inheritance

 1 class Sample {
 2     Sample(String s) {
 3         System.out.println(s);
 4     }
 5 
 6     Sample() {
 7         System.out.println("Sample The default constructor is called");
 8     }
 9 }
10 
11 class Test {
12     static {
13         System.out.println("Parent class static Block 1 execution");
14     }
15 
16     static Sample staticSam1 = new Sample("Static member of parent class staticSam1 Initialization");
17     Sample sam1 = new Sample("Parent class sam1 Membership initialization");
18     static Sample staticSam2 = new Sample("Static member of parent class staticSam2 Initialization");
19 
20     static {
21         System.out.println("Parent class static Block 2 execution");
22     }
23 
24     Test() {
25         System.out.println("Parent class Test The default constructor is called");
26     }
27 
28     Sample sam2 = new Sample("Parent class sam2 Membership initialization");
29 }
30 
31 class TestSub extends Test {
32     static Sample staticSamSub = new Sample("Subclass static members staticSamSub Initialization");
33 
34     TestSub() {
35         System.out.println("Subclass TestSub The default constructor is called");
36     }
37 
38     Sample sam1 = new Sample("Subclass sam1 Membership initialization");
39     static Sample staticSamSub1 = new Sample("Subclass static members staticSamSub1 Initialization");
40 
41     static {
42         System.out.println("Subclass static Block execution");
43     }
44 
45     Sample sam2 = new Sample("Subclass sam2 Membership initialization");
46 }

Implementation results:

The parent static block 1 executes

staticSam1 initialization of static member of parent class

staticSam2 initialization of static member of parent class

The parent static block 2 executes

Initialization of static members of the parent class

staticSamSub initialization of static member of subclass

Initialization of static member staticSamSub1 of subclass

Subclass static block execution

Subclass static member initialization

Initialization of the parent sam1 member

Initialization of parent sam2 members

The default constructor of parent Test is called.

Initialization of normal members of the parent class and execution of constructors

Subclass sam1 member initialization

Subclass sam2 member initialization

The default constructor of the subclass TestSub is called

Initialization of normal members of the parent class and execution of constructors

The conclusion of JAVA initialization sequence is drawn as follows:

1 Initialization of all static members of the inheritance system (first parent class, then subclass)

2 Parent Class Initialization Completed (Initialization of Common Members - > Call of Constructor)

3 subclass initialization (common member - > constructor)

The order of JAVA initialization is as follows:

 

Keywords: Java

Added by binto on Wed, 15 May 2019 17:27:23 +0300