Java 类初始化顺序 -- 结合阿里2014校招笔试 Java 附加题
来源:互联网 发布:淘宝店铺红包怎么领取 编辑:程序博客网 时间:2024/04/28 11:14
首先用文字简单描述一下Java 类的初始化顺序(此处引用 Core Java Volume I 中的译文)
规则1:在类第一次加载的时候,将会进行静态域的初始化:
1. 将所有的静态数据域初始化为默认值(0、false 和 null)
2. 按照在类中定义的顺序依次执行静态初始化语句和静态初始化块
规则2:调用构造器的具体处理步骤:
1. 将所有的数据域初始化为默认值(0、false 和 null)
2. 按照在类中定义的顺序依次执行初始化语句和初始化块
3. 如果构造器调用的其他的构造器,则转而执行另一构造器
4. 执行构造器主体
类加载的时机只需简单的知道是在调用构造器之前且只有一次,具体的类加载过程这里就不说了,否则就跑得太偏了。
下面我们来看一下阿里巴巴 2014 年校招研发类笔试的 Java 附加题
- public class Test {
- public static int k = 0;
- public static Test t1 = new Test("t1");
- public static Test t2 = new Test("t2");
- public static int i = print("i");
- public static int n = 99;
- private int a = 0;
- public int j = print("j");
- {
- print("构造块");
- }
- static {
- print("静态块");
- }
- 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 args[]) {
- Test t = new Test("init");
- }
- }
这里的输出结果为:
- 1:j i=0 n=0
- 2:构造块 i=1 n=1
- 3:t1 i=2 n=2
- 4:j i=3 n=3
- 5:构造块 i=4 n=4
- 6:t2 i=5 n=5
- 7:i i=6 n=6
- 8:静态块 i=7 n=99
- 9:j i=8 n=100
- 10:构造块 i=9 n=101
- 11:init i=10 n=102
我当时看到这个题目的时候,心里直接两个字:我草...
其实仔细分析一下,用到的东西不过就是上面咱们说的那些规则。
以下为详细分析:
1. 首先类被加载,类中所有的静态域被初始化为0、false 或 null(注意这里并没有执行初始化语句,千万要搞明白初始化语句这里的区别)。
变量状态:k, i, n = 0; t1, t2 = null
2. 然后依照定义次序执行类中的静态域初始化语句和静态初始化块
3. 执行到静态初始化语句 public static Test t1 = new Test("t1"); 时,调用构造器(这里类不会再次加载),这是会产生一个新对象 t1,对新对象执行上面说的步骤1。
4. 对象 t1 初始化输出为:
- 1:j i=0 n=0
- 2:构造块 i=1 n=1
- 3:t1 i=2 n=2
- 4:j i=3 n=3
- 5:构造块 i=4 n=4
- 6:t2 i=5 n=5
- 7:i i=6 n=6
- 8:静态块 i=7 n=99
- 9:j i=8 n=100
- 10:构造块 i=9 n=101
- 11:init i=10 n=102
转自:http://blog.csdn.net/geekdonie/article/details/12260599
- Java 类初始化顺序 -- 结合阿里2014校招笔试 Java 附加题
- Java 类初始化顺序 -- 结合阿里2014校招笔试 Java 附加题
- java类初始化顺序-阿里笔试题
- java类初始化顺序-阿里笔试题
- java类初始化顺序-阿里笔试题
- java类初始化顺序-阿里笔试题
- 阿里笔试Java初始化
- 2014 阿里校招研发岗位在线笔试题+附加题
- 2016阿里在线笔试Java研发附加题
- 阿里2014校招笔试题
- 2014 阿里校招附加题2014-8-29
- 阿里校招附加题2014-8-29
- 阿里校招附加题2014-8-29
- java类的加载以及初始化顺序&&阿里真题
- 2017阿里校招笔试附加题2 菜鸟仓库货架编号问题
- 阿里校招笔试题
- JAVA笔试之初始化顺序
- 2016年阿里校招笔试题(JAVA研发岗)
- 浅谈 chukwa 在数据收集处理方面的应用
- 一步步学习SPD2010--第十一章节--处理母版页(10)--重置母版页到网站定义
- 杨静是个傻b
- 妹的,函数指针、字符串反转
- Catenyms
- Java 类初始化顺序 -- 结合阿里2014校招笔试 Java 附加题
- iOS 即时聊天 音频格式转NSData
- JavaScript和CSS Style属性对照表
- ios设备唯一标识获取策略
- Linux下crontab命令的用法
- opencv二值化函数cvThreshold
- c语言一些库函数实现
- FZU1669 Right-angled Triangle 本原毕达哥斯拉三元组 特殊不定方程的应用
- iOS AsyncSocket