Java对象初始化

来源:互联网 发布:温什么知什么的成语 编辑:程序博客网 时间:2024/05/19 13:06

偶然看到一个奇葩的面试题,关于 Java 对象初始化的,追着追着就晕了。直接上题目吧:

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;    static {        print("静态块");    }    private int j = print("j");    {        print("构造块");    }    public InitializeDemo(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 args[]) {        new InitializeDemo("init");    }}

我使用的是 Jdk8,运行之后控制台打印的结果是:

1:j   i=0    n=02:构造块   i=1    n=13:t1   i=2    n=24:j   i=3    n=35:构造块   i=4    n=46:t2   i=5    n=57:i   i=6    n=68:静态块   i=7    n=999:j   i=8    n=10010:构造块   i=9    n=10111:init   i=10    n=102

核心就是类加载及初始化过程:
1、静态域初始化
2、静态块初始化
3、实例域初始化
4、实例块初始化
5、构造函数
它们的顺序是:1、2 > 3、4 > 5。
其中 1、2 之间按声明的顺序执行; 3、4 按声明的顺序执行。
完。

详细的请参考转载的出处:> http://blog.csdn.net/ysjian_pingcx/article/details/19605335

0 0
原创粉丝点击