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

深度剖析类加载器系类文章:一、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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值