论坛首页 编程语言技术论坛

考察类加载的面试题

浏览 1789 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-12-25  
这道题目主要考察对类加载概念的认识,如果你认识ClassLoader加载类的三步骤的话,这题应该不是很难。

类加载器加载一个类的三个步骤:
(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==
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics