zoukankan      html  css  js  c++  java
  • 类的加载顺序

    摘录自  https://www.cnblogs.com/blueskyli/p/8487774.html#undefined

    我们知道Java虚拟机为类的静态变量分配内存,并设置默认的初始值实在准备阶段开始的,这里所设置的初始值通常情况下是类型默认的零值(如0、0L、null、false等),而不是被在Java代码中被显式地赋予的值。

    案例分析

    好了,说了这么多开始分析案例,我们知道类是自上而下执行的,所以第一份代码解析如下

    1. 当Singletom类在准备阶段,由于只是分配数据类型默认值,所以此时的counter1=0、counter2=0;
    2. 当Singletom类在初始化阶段,1调用了Singleton的实例并对counter1和counter2分别进行了++操作,所以此时的counter1=1,counter2=1,由于2中未对counter1进行显式初始化,所以此时的counter1仍然保留值1,而counter2被显式赋值成0,所以counter2在初始化阶段又被改为0
    3. 在经过了准备、初始化阶段后的最终结果就变成了counter1:1、counter2:0

    第二份代码是将1->2->3的顺序修改为2->3->1,我们按着上面的思路重新分析发现很清晰的就知道了结果

    准备阶段没有任何变化,counter1=0、counter2=0;

    初始化阶段,counter1没有被显式赋值,所以counter1仍然保留值0,counter2被显式赋值为0,所以counter2=0,到第三步时调用了Singleton()方法,此时执行了++操作

    最终结果 counter1:1、counter2:1

  • 相关阅读:
    Ubuntu 永久修改DNS
    三大主流MQ的组织结构
    nginx基本配置
    CentOS7安装RabbitMQ
    单个表上亿行数据的主键、索引设计,及分页查询
    [SQL]行列转换
    《团队协作的五大障碍》读后感
    【2021-09-26】面对困难是未来绝不后悔的事情
    【2021-09-25】摇摆不定反逼自己脚踏实地
    【一句日历】2021年10月
  • 原文地址:https://www.cnblogs.com/sg9527/p/8490503.html
Copyright © 2011-2022 走看看