一道Java面试题---(关于static)

碰到一道蛮有趣的题;记录一下~

问:一下代码输出结果是什么?为什么?

输出结果:

我们改变一下上述代码中的语句执行顺序;再看打印结果如下:

从以上两个结果中可以看到,当语句public static B t2 = new B();改变了顺序之后;结果顺序也相应的发生了改变;是什么原因导致的呢?

个人分析(通过查阅相关资料),可能与标准答案有所出入。。。

先分析类加载的过程:

1.类的加载其实就是jvm虚拟机对.class字节码文件的加载

2.当配置了classpath环境变量后,jvm虚拟机会到classpath所指路径下寻找对应.class文件;如果没有配置,只会在当前路径下寻找(classpath需手动新建配置)

注:

加载过程中,类中的静态成员是随着类一起出现的,被加载到方法区的静态区中;

接着会给静态区中的所有静态成员变量开始默认初始化;

当所有的静态成员变量默认初始化完成之后,开始给所有的静态成员变量显示初始化;

当所有的静态成员变量显示初始化完成之后,开始执行类中的静态代码块;

类中所有的静态代码块执行完成后,当前这个类加载结束

上面代码中的t1,t2在我看来是静态成员变量;所以要先对其进行初始化,即对象的初始化;所以会先执行构造代码块;

执行结束后,开始执行代码中的静态代码块,因为静态代码块随着类加载只会执行一次,所以显示只有一次;

综上所述,结果便如上面控制台输出显示的那样。

(个人分析,仅供参考!!!)

猜你喜欢

转载自www.cnblogs.com/cc-ccblog/p/9906782.html
今日推荐