Java class construction sequence
1. No Object Construction
Public class Test {public static int k = 0; public static int n = 99; public static int I = print ("I "); static {print ("static block") ;}{ print ("") ;}public int j = print ("j"); public Test (String str) {System. out. println (++ k) + ":" + str + "I =" + I + "n =" + n); ++ I; ++ n ;} public static int print (String str) {System. out. println (++ k) + ":" + str + "I =" + I + "n =" + n); ++ n; return ++ I ;} public static void main (String [] strings ){}}
Construct static variables and static code blocks when loading classes.
The order is defined.
Result:
1: I = 0 n = 99
2: static block I = 1 n = 100
2. Construct an object in the main function
Public class Test {public static int k = 0; public static int n = 99; public static int I = print ("I "); static {print ("static block") ;}{ print ("") ;}public int j = print ("j"); public Test (String str) {System. out. println (++ k) + ":" + str + "I =" + I + "n =" + n); ++ I; ++ n ;} public static int print (String str) {System. out. println (++ k) + ":" + str + "I =" + I + "n =" + n); ++ n; return ++ I ;} public static void main (String [] strings) {Test t = new Test ("init ");}}
The first two are the same as above.
When constructing an object, construct non-static variables in the object before calling the constructor.
Non-static class variables are constructed in the defined order.
Result:
1: I = 0 n = 99
2: static block I = 1 n = 100
3: Construct block I = 2 n = 101
4: j I = 3 n = 102
5: init I = 4 n = 103.
3. The class contains static objects.
Public class Test {public static int k = 0; public static int n = 99; public static Test t1 = new Test ("t1 "); public static int I = print ("I"); static {print ("static block") ;}{ print ("constructed block ");} public int j = print ("j"); public static Test t2 = new Test ("t2"); public Test (String str) {System. out. println (++ k) + ":" + str + "I =" + I + "n =" + n); ++ I; ++ n ;} public static int print (String str) {System. out. println (++ k) + ":" + str + "I =" + I + "n =" + n); ++ n; return ++ I ;} public static void main (String [] strings) {Test t = new Test ("init ");}}
Static variables, objects, and code blocks are constructed in the defined order.
When constructing a static object, as the object is constructed, the non-static variable is first constructed as described in section 2, and the constructor is called.
Result:
1: Construct block I = 0 n = 99
2: j I = 1 n = 100
3: t1 I = 2 n = 101
4: I = 3 n = 102
5: static block I = 4 n = 103
6: Construct block I = 5 n = 104
7: j I = 6 n = 105
8: t2 I = 7n = 106
9: Construct block I = 8 n = 107
10: j I = 9 n = 108
11: init I = 10 n = 109
4. static variable Initialization
Public class Test {public static int k = 0; public static Test t1 = new Test ("t1"); public static int I = print ("I "); public static int n = 99; static {print ("static block") ;}{ print ("");} public int j = print ("j "); public static Test t2 = new Test ("t2"); public Test (String str) {System. out. println (++ k) + ":" + str + "I =" + I + "n =" + n); ++ I; ++ n ;} public static int print (String str) {System. out. println (++ k) + ":" + str + "I =" + I + "n =" + n); ++ n; return ++ I ;} public static void main (String [] strings) {Test t = new Test ("init ");}}
Initialize by default before assigning values.
Result:
1: Construct block I = 0 n = 0
2: j I = 1 n = 1
3: t1 I = 2 n = 2
4: I = 3 n = 3
5: static block I = 4 n = 99
6: Construct block I = 5 n = 100
7: j I = 6 n = 101
8: t2 I = 7n = 102
9: Construct block I = 8 n = 103
10: j I = 9 n = 104
11: init I = 10 n = 105