`

阿里巴巴2014年上海笔试题---类初始化及执行顺序

    博客分类:
  • java
 
阅读更多
package com.alibaba.interview;

/**
 * 问题:下面语句的输出是什么?
 */



/**
 * 非静态变量属于某一指定对象,而不是属于类
 * 所以,每次new一个Test对象时,就会执行public int j = print("j")这行代码
 *
 */
public class Test {

	public static int k = 0;
	
	public static Test t1 = new Test("t1");
	
	public static Test t2 = new Test("t2");
	
	/**
	 * 在这之前,i的值为0
	 */
	public static int i = print("i");
	/**
	 * 在这之前,n的值为0
	 */
	public static int n = 99;
	
	public int j = print("j");
	
	/**
	 * 构造代码块是给所有对象的共性内容进行初始化,是在建立对象的时候才执行
	 * 并且优于构造函数
	 */
	{
		print("构造块");
	}
	/**
	 * 静态代码块随着类的加载二执行,只执行一次,并优于主函数
	 */
	static{
		print("静态块");
	}
	
	public Test(String str){
		System.out.println((++k)+" : "+str+" i= "+i+" n="+n);
		++i;
		++n;
	}
	
	public static int print(String str){
		System.out.println((++k)+" : "+str+" i= "+i+" n="+n);
		++n;
		return ++i;
	}
	
	public static void main(String[] args) {
		new Test("init");
	}
}



运行结果:
1 : j i= 0 n=0
2 : 构造块 i= 1 n=1
3 : t1 i= 2 n=2
4 : j i= 3 n=3
5 : 构造块 i= 4 n=4
6 : t2 i= 5 n=5
7 : i i= 6 n=6
8 : 静态块 i= 7 n=99
9 : j i= 8 n=100
10 : 构造块 i= 9 n=101
11 : init i= 10 n=102
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics