浏览 1789 次
锁定老帖子 主题:考察类加载的面试题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-12-25
类加载器加载一个类的三个步骤: (1) 加载:查找并加载类的二进制数据。 (2) 连接:包括验证、准备和解析类的二进制数据。 1 验证:确保被加载类的二进制数据。 2 准备:为类的静态变量分配内存,并将其初始化为默认值。 3 解析:把类中的符号引用转换为直接引用。 (3) 把类的静态变量赋予正确的初始值。 类加载器的学问太大了,在这里就不多介绍了。 看一下下面两段代码分别输出什么? //code_1 public 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_2 public 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== 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |