`
sha851092391
  • 浏览: 72562 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

考察类加载器的面试题

阅读更多
这道题目主要考察对类加载概念的认识,如果你认识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