深度剖析类加载器系列文章:一、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
- 深度剖析类加载器系列文章:一、Java类的加载、链接、初始化
- 深度剖析类加载器系列文章:二、类的主动使用和被动使用
- Java类的加载、链接和初始化
- Java类的加载、链接和初始化
- Java类的加载、链接和初始化
- Java类的加载、链接和初始化
- Java类的加载,链接,初始化
- Java类的加载、链接和初始化
- Java类的加载、链接和初始化
- JAVA类的加载,链接,初始化总结
- java类的加载、链接和初始化(摘自infoq的java深度历险)
- Java深度历险(二)——Java类的加载、链接和初始化
- Java深度历险(二)——Java类的加载、链接和初始化
- Java深度历险(二)——Java类的加载、链接和初始化
- Java深度历险(二)——Java类的加载、链接和初始化
- Java深度历险(二)——Java类的加载、链接和初始化
- Java深度历险(二)——Java类的加载、链接和初始化
- Java深度历险(二)——Java类的加载、链接和初始化
- 写了一个简单的数据库连接池
- 《Java 编程思想》-第6章 访问权限控制 笔记
- 数据库中多对多的关系设计
- Hyperledger fablic 0.6 在centos7环境下的安装与部署
- Bash基本功能
- 深度剖析类加载器系列文章:一、Java类的加载、链接、初始化
- PHP生成随机姓名的类
- Java多线程
- 周志华-机器学习-第二章
- 剑指offer-面试题24-二叉搜索树的后序遍历序列
- Android插件化总结
- get bash shell with python fabric
- JAVA后台集成支付宝的注意事项,持续更新
- opencv_traincascade的参数解释——(LBP+cascade)行人检测