考察类加载器的面试题
这道题目主要考察对类加载概念的认识,如果你认识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();}}