public class InitializeDemo { private static int k = 1; private static InitializeDemo t1 = new InitializeDemo("t1"); private static InitializeDemo t2 = new InitializeDemo("t2"); private static int i = print("i"); private static int n = 99; { print("初始化块"); j=100; } public InitializeDemo(String str) { System.out.println((k++) + ":" + str + " i=" + i + " n=" + n); ++i; ++n; } static { print("静态块"); n=100; } private int j = print("j"); public static int print(String str) { System.out.println((k++) + ":" + str + " i=" + i + " n=" + n); ++n; return ++i; } public static void main(String[] args) { System.out.println("main方法开始执行"); InitializeDemo test = new InitializeDemo("test"); } }
输出结果:
1:初始化块 i=0 n=0
2:j i=1 n=1
3:t1 i=2 n=2
4:初始化块 i=3 n=3
5:j i=4 n=4
6:t2 i=5 n=5
7:i i=6 n=6
8:静态块 i=7 n=99
main方法开始执行
9:初始化块 i=8 n=100
10:j i=9 n=101
11:test i=10 n=102
过程详解:
先加载main所在类的静态代码,从上至下,遇到new InitializeDemo(“t1”);执行非静态的代码块,初始化成员变量(按照代码顺序)和构造方法,下面的new InitializeDemo(“t2”)同理,这样就从打印了1-6。
然后初始化静态变量i,执行print(“i”);方法,打印7。
然后执行静态块,此时main所在类的静态资源加载完毕,输出main方法开始执行,接下来初始化一个对象(9-11同1-3),只执行非静态的初始化工作。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)