类开始加载到运行要经过以下几个步骤:

加载:查找并加载类的二进制数据(加载到内存中) 
连接 
    验证:确保被加载的类的正确性 
    准备:为类的静态变量分配内存,并将其初始化为默认值 
    解析:把类中的符号引用转换为直接引用 
初始化:为类的静态变量赋予正确的初始值(用户赋予的值)

下面看一个例子:

 1 package com.naxsu.jvm;
 2 class Singleton {
 3 //    private static Singleton singleton=new Singleton();//放在前面,输出1和0
 4     public static int count1;
 5     public static int count2 = 0;
 6     private static Singleton singleton=new Singleton();//放在后面,输出1和1
 7
 8     private Singleton() {
 9         count1++;
10         count2++;
11     }
12
13     public static Singleton getInstance(){
14         return singleton;
15     }
16
17 }
18
19 public class MyTest {
20     public static void main(String[] args) throws ClassNotFoundException {
21         Singleton singleton= Singleton.getInstance();
22         System.out.println(singleton.count1);
23         System.out.println(singleton.count2);
24     }
25 }

我们来分析一下这个类的运行过程:

  1. Singleton类的二进制数据被加载到内存中。
  2. 验证类的正确性
  3. count1count2为配内存,为都赋予默认值0,singleton =null

l  放在前面那种情况,singleton =new Singleton(),count1count2都为1,然后给静态变量赋予正确的初始值,这里用户给count2初始化的值是0,所以最后输出是1和0

l  给静态变量赋予正确的初始值,这里用户给count2初始化的值是0,singleton =new Singleton(),count1count2都为1,所以最后输出是1和1

更多资源请访问:http://bbs.naxsu.com

转载于:https://www.cnblogs.com/naxsu/archive/2012/05/13/2498667.html

深入理解java虚拟机系列文章:类的加载、连接与初始化相关推荐

  1. 类的加载连接和初始化

    类的加载.连接和初始化 ​ 当Java程序中需要使用到某个类时,虚拟机会保证这个类已经被加载.连接和初始化.而连接又包含验证.准备和解析这三个子过程,这个过程必须严格的按照顺序执行. 类的加载 ​ 通 ...

  2. [置顶]类的加载连接初始化

    自己是在看视频的过程中看到一个比较有意思的面试题然后学习了一下关于jvm中类的加载连接和初始化部分的内容,感觉很有收获,所以在博客中记录一下. 首先贴代码: class SingleTon {publ ...

  3. java 内部类 加载_举例讲解Java的内部类与类的加载器

    内部类 class A { //Inner1 要在 A 初始化后 才能使用,即要被A的对象所调用 class Inner1 { int k = 0; // static int j = 0; //A加 ...

  4. JVM详解之:类的加载链接和初始化

    文章目录 简介 加载 运行时常量池 类加载器 链接 验证 准备 解析 初始化 总结 简介 有了java class文件之后,为了让class文件转换成为JVM可以真正运行的结构,需要经历加载,链接和初 ...

  5. java类加载过程_java类的加载过程

    在这本书里面,在讲到类初始化的五种情况时,提及了一个比较有趣的事情.先来看看下面的代码 public class SubClass { static{ System.err.println(" ...

  6. java虚拟机预先加载哪些类_Java虚拟机JVM学习02 类的加载概述

    Java虚拟机JVM学习02 类的加载概述 类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对 ...

  7. 类加载器 - 类的加载、连接与初始化

    类的加载.连接与初始化 系统流小说 www.kuwx.net 概述 在Java代码中,类型的加载.连接与初始化过程都是在程序运行期间完成的 类型:可以理解为一个class 加载:查找并加载类的二进制数 ...

  8. 深入理解 Java 虚拟机 - 你了解 GC 算法原理吗

    来自:好好学Java 虚拟机系列文章 深入理解 Java 虚拟机(第一弹) - Java 内存区域透彻分析 深入理解 Java 虚拟机(第二弹) - 常用 vm 参数分析 深入理解 Java 虚拟机- ...

  9. 深入理解Java虚拟机——01_JVM初识

    深入理解Java虚拟机系列 01_JVM初识 02_JVM类加载子系统 03_JVM运行时数据区初识 04_深入JVM与垃圾回收机制 JVM初识 深入理解Java虚拟机系列 JVM简介 1.JVM的位 ...

  10. 【java虚拟机系列】JVM类加载器与ClassNotFoundException和NoClassDefFoundError

    在我们日常的项目开发中,会经常碰到ClassNotFoundException和NoClassDefFoundError这两种异常,对于经验足够的工程师而言,可能很轻松的就可以解决,但是却不一定明白为 ...

最新文章

  1. 滴滴ElasticSearch平台跨版本升级以及平台重构之路
  2. 批处理,%~d0 cd %~dp0 代表什么意思
  3. 双轴机械臂串口控制命令开发与测试:STM32F103控制板,简易调试命令集合
  4. spcontent------spcollection.add(field)
  5. UA OPTI501 电磁波 求解麦克斯韦方程组的Fourier方法3 Coulomb Gauge下讨论Maxwell方程
  6. 里写注释 postman_没用过这些IDEA插件?怪不得写代码头疼
  7. Spark初识-Spark基本架构概览使用
  8. Centos搭建SVN服务器及配置文件
  9. @PropertySource读取properties属性 中文乱码问题
  10. Rust笔记1 rust基本概念
  11. 解决Request method 'GET' not supported问题
  12. 58同城 | Embedding技术在房产推荐中的应用
  13. 方正文祥E520硬盘保护卡还原卡软件使用要点讲解
  14. MySQL必知必会——第十四章使用子查询
  15. Android课题研究的主要观点,课题研究的主要内容
  16. 点在多边形内算法,JS判断一个点是否在一个复杂多边形的内部
  17. 豆瓣 API ( 解决104问题 )
  18. AppCan推插件AppCan-EC:电商网站可DIY手机客户端
  19. 打造店铺爆款的玩法方式解析
  20. 《新程序员》杂志|李鹏辉谈开源云原生消息流系统

热门文章

  1. 创建phpinfo.php
  2. java怎样学_告诉你java如何学
  3. linux 移动压缩包 命令,文件的复制、移动、压缩等对SELinux属性关系详解
  4. springMVC简易学习笔记一
  5. Ubuntu 15.04 Gogs(git 版本库) 二进制安装
  6. Nginx 解决请求跨域 与 配置 gzip 压缩
  7. Spring Boot 2.0.3 修改 Servlet 容器(服务器)配置
  8. 小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_1、SpringBoot2.x课程介绍和高手系列知识点...
  9. Python中通过Image的open之后,去show结果打不开bmp图片,无法正常显示图片
  10. Codeforces 1169A Circle Metro