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

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

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

输出结果:

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

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

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

先分析类加载的过程:

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

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

注:

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

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

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

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

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

 

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

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

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

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

转载于:https://www.cnblogs.com/cc-ccblog/p/9906782.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值