深度剖析类加载器系列文章:一、Java类的加载、链接、初始化

来源:互联网 发布:旅游大数据分析方案 编辑:程序博客网 时间:2024/05/16 06:11

深度剖析类加载器系类文章:一、Java类的加载、链接、初始化

1.先上一段代码,分析控制台输出的结果

package com.wzm;public class Test1 {/** * @ClassName: Test1 * @Description:  * @author nameisbill * @date 2017年1月18日 下午2:01:55 *  */    public static void main(String[] args) {        System.out.println(Singleton.count1);        System.out.println(Singleton.count2);    }}class Singleton{    private static Singleton singleton=new Singleton();    public static int count1;    public static int count2=0;    private Singleton() {        count1++;        count2++;    }    public static Singleton getInstance(){        return singleton;    }}

上面一段代码控制台输出的结果是:1、0
如果我们理解Java的类加载过程,我们就会理解为什么上一段代码的输出结果是:1、0
下面就开始介绍Java的类加载过程

2.Java类的加载、链接、初始化

1. 加载:查找并加载类的字节码文件

2. 链接

a.验证:确保被加载类的正确性
b.准备:为类的静态变量分配类存,并执行隐式初始化(有虚拟机把静态变量初始化为其默认值)
c.解析:把类的符号引用转换为直接引用

3. 初始化:为类的变量赋予正确的初始值。(执行静态变量的赋值语句、静态代码块)

上面就是Java类的加载过程,知道了类的加载过程,我们就能分析为什么上面一段代码的输出结果是:1、0
分析:
准备阶段:singleton=null;count1=0;count2=0;
初始化阶段:执行singleton=new Singleton();这时count1=1,count2=1;
执行count2=0;这时count2又变为0;所以最终的输出结果为:1、0

0 0
原创粉丝点击