这道面试必问的JVM面试题70%的Java程序员会做错
前言 聊聊JVM,一个熟悉又陌生的名词,从认识Java的第一天起,我们就会听到这个名字,在参加工作的前一两年,面试的时候还会经常被问到JDK,JRE,JVM这三者的区别。 JVM可以说和我们是老朋友了,但是在工作中的应用场景也许不如那些框架,但是在关键时候还是得靠它去搞定问题,俗话说得好,知己知彼,方能百战不殆,JVM作为前往高级工程师的一道坎,从这篇文章开始,我们会去逐步的分析,讲解,攻克这座大山。 有关Java虚拟机类加载机制相关的文章一搜一大把,就也不必再赘述一遍了。在这里捞出一道code题要各位大佬来把玩把玩,如果你一眼就看出了端倪,那么恭喜你,你可以下山了: 问题:请问这段程序的输出是什么? 一般对于这类问题,小伙伴们脑海中肯定浮现出这样的知识点 Java中赋值顺序: 父类的静态变量赋值 自身的静态变量赋值 父类成员变量赋值和父类块赋值 父类构造函数赋值 自身成员变量赋值和自身块赋值 自身构造函数赋值 按照这个理论输出是什么呢? 答案输出:1 4,这样正确嚒? 肯定不正确啦,这里不是说上面的规则不正确,而是说不能简单的套用这个规则。正确的答案是: 有没有答对呢?这里主要的点之一:实例初始化不一定要在类初始化结束之后才开始初始化。类的生命周期是:加载->验证->准备->解析->初始化->使用->卸载,只有在准备阶段和初始化阶段才会涉及类变量的初始化和赋值