读书人

调研类加载器的面试题

发布时间: 2012-12-25 16:18:28 作者: rapoo

考察类加载器的面试题
这道题目主要考察对类加载概念的认识,如果你认识ClassLoader加载类的三步骤的话,这题应该不是很难。

类加载器加载一个类的三个步骤:
(1) 加载:查找并加载类的二进制数据。
(2) 连接:包括验证、准备和解析类的二进制数据。
1 验证:确保被加载类的二进制数据。
2 准备:为类的静态变量分配内存,并将其初始化为默认值。
3 解析:把类中的符号引用转换为直接引用。
(3) 把类的静态变量赋予正确的初始值。
类加载器的学问太大了,在这里就不多介绍了。

看一下下面两段代码分别输出什么?

//code_1public class SingleInstance {private static SingleInstance si = new SingleInstance();//注意这里public static int num_1;public static int num_2 = 0;public SingleInstance() {num_1 ++;num_2 ++;}public static SingleInstance getInstance() {return si;}public void print() {System.out.println(num_1 + ":" + num_2);}public static void main(String[] args) {SingleInstance.getInstance().print();}}//code_2public class SingleInstance {public static int num_1;public static int num_2 = 0;private static SingleInstance si = new SingleInstance();//注意,跟上面不一样了public SingleInstance() {num_1 ++;num_2 ++;}public static SingleInstance getInstance() {return si;}public void print() {System.out.println(num_1 + ":" + num_2);}public static void main(String[] args) {SingleInstance.getInstance().print();}}


答案(答案经过两次Base64的编码):
code_1 : TVRvdw==
code_2 : TVRveA==

读书人网 >编程

热点推荐