面试题
package statict;
public class StaticTest2 {
static Static2 s2 = new Static2(); static int i = 0; static int j ; static class Static2{ public Static2() { StaticTest2.i++; StaticTest2.j++; } } public static void main(String[] args) { new StaticTest2(); System.out.println(StaticTest2.i); System.out.println(StaticTest2.j); }}
输出结果:
0
1
主要面试点:对象初始化过程、静态变量初始化过程
解析:首先静态变量依次执行初始化过程,首先是声明变量,并设置默认值。注意是默认值不是初值。
此时各个变量的值为:
s2 = null;
i = 0; j = 0 ;随后,对s2赋初值,执行Static2的构造方法,i++,j++。此时i=1,j=1
然后,对变量 i 赋初值,因为变量 j 没有初值,也就不会有这个过程。此时,i=0,j=1。