zoukankan      html  css  js  c++  java
  • 了解JVM加载实例化类的原理

    class Singleton {
    private static Singleton instance = new Singleton();
    public static int a;
    public static int b=0;

    private Singleton() {
    a++;
    b++;
    }

    public static Singleton getInstance() {
    return instance;
    }
    }


    public class MAINTEST {
    public static void main(String[] args) {
    Singleton singleton = Singleton.getInstance();
    System.out.println("a=" + singleton.a);
    System.out.println("b=" + singleton.b);
    }
    }


    public class MAINTEST {

    public static void main(String[] args) {
    Singleton singleton = Singleton.getInstance();
    System.out.println("a=" + singleton.a);
    System.out.println("b=" + singleton.b);
    }
    }











    class Singleton {
    public static int a;
    public static int b=0;
    private static Singleton instance = new Singleton();

    private Singleton() {
    a++;
    b++;
    }

    public static Singleton getInstance() {
    return instance;
    }
    }


    public class MAINTEST {
    public static void main(String[] args) {
    Singleton singleton = Singleton.getInstance();
    System.out.println("a=" + singleton.a);
    System.out.println("b=" + singleton.b);
    }
    }




    分析:

    1.类的入口从main函数开始,当程序已启动,首先要调用第19行的代码,这个时候调用了类的静态方法(这时候,类开始初始化)

    2.当类开始初始化的时候,所有的静态变量会被初始化成默认值。

    3.以第一个图来说,当初始化完毕类的静态变量后,开始加载类,这个时候是按照顺序往下解析的。

    4.当执行第二行的new Singleton的时候,会调用构造方法,这个时候,a和b都变成了1

    5.当程序执行到第三行的时候,a还是1

    6.当程序执行到第四行的时候,b变成了0

    7.所以输出1和0


    图二自己就可以理解了。



  • 相关阅读:
    9、par画图参数
    awk
    Android Studio Gradle下载的包在哪里?
    .net core webapi 在原有基础上修改。
    .net core webapi 部署到 IIS
    原来部署好的WCF(可以调用),因为部署.net core,而安装了DotNetCore.2.0.5-WindowsHosting,导致现在WCF站点不可以。
    sql2008R2新建链接服务器。
    Dynamics CRM 365常用js记录。
    <div>标签输入文字
    dynamics crm 365 附件上传图片并且显示。
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3198923.html
Copyright © 2011-2022 走看看