这一章我们对初始化进行一下更深的理解: 类在初始化的时候,静态变量的声明语句以及静态代码块都被看作类的初始化语句,Java虚拟机会按照初始化语句在类文件中的先后顺序来依次加载它们。 上图中a的初始化其实经过了四步1、a被初始化为默认值02、a被赋予正确的初始值13、执行静态代码块,将a的值赋为24、 ...
分类:
其他好文 时间:
2018-04-01 16:06:10
阅读次数:
161
首先,我们以一个最经典的例子来让大家知道什么是类的加载机制,上代码: 我们先猜测一下运行结果,然后我们再来调换一下单实例生成的顺序,将: 修改为 然而我们会惊奇的发现,结果不一样,第一个结果是counter1=1,counter2=0 第二个结果是 counter1=1,counter2=1, 这是 ...
分类:
其他好文 时间:
2018-04-01 01:06:11
阅读次数:
198
类是在运行期间动态加载的。 类的生命周期 包括以下 7 个阶段: 加载(Loading) 验证(Verification) 准备(Preparation) 解析(Resolution) 初始化(Initialization) 使用(Using) 卸载(Unloading) 其中解析过程在某些情况下可 ...
分类:
其他好文 时间:
2018-03-31 21:25:47
阅读次数:
174
类的实例化过程 有父类的情况 1. 加载父类静态 1.1 为静态属性分配存储空间并赋初始值 1.2 执行静态初始化块和静态初始化语句(从上至下)2. 加载子类静态 2.1 为静态属性分配存储空间 2.2 执行静态初始化块和静态初始化语句(从上至下)3. 加载父类非静态 3.1 为非静态块分配空间 3 ...
分类:
其他好文 时间:
2018-03-30 14:11:26
阅读次数:
182
一、类加载机制 类加载器将类的.class文件中的二进制数据读入到内存中,将其放在方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问 ...
分类:
编程语言 时间:
2018-03-29 19:09:30
阅读次数:
161
三、类是如何被加载的? 什么是类加载机制? 将.class中的二进制数据读到内存,然后整理成类的元数据写到方法区;然后根据类的元数据结构在堆内存中创建类的实例对象; 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang. ...
分类:
其他好文 时间:
2018-03-29 13:34:54
阅读次数:
133
类的加载机制JVM把class文件加载到内存,并对数据进行校验,解析和初始化,最终形成JVM可以直接使用的Java类型的过程。加载将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成一个代表这个类文件的java.lang.Class对象,作为方法区类数据的访问接口。-----这个过程需要类加载器参与链接验证:确保加载的类信息符合JVM规范,没有安全方面
分类:
其他好文 时间:
2018-03-19 10:21:55
阅读次数:
106
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)-->>验证(Verification)-->>准备(Preparation)-->>解析(Resolution)-->>初始化(Initialization)-->>使用(Using)-->>卸载(Unlo ...
分类:
编程语言 时间:
2018-03-18 20:08:57
阅读次数:
168
类的初始化时机 在上篇文章中讲到了类的六种主动使用方式,反射是其中的一种(Class.forName(“com.jack.test”)),这里需要注意一点:当调用ClasLoader类的loadClass方法对类进行加载的时候,并不是对类的主动调用,不会导致类的初始化。 那么接下来我继续给大家2个例 ...
分类:
编程语言 时间:
2018-03-16 19:36:02
阅读次数:
187
类完整的生命周期包括加载,验证,准备,解析,初始化,使用,卸载,七个阶段.其中验证,准备,解析统称为连接,类的卸载在前面的关于垃圾回收的博文中已经介绍. 加载,验证,准备,初始化,卸载这五个阶段的顺序是确定的,类的加载必须按照这种顺序按部就班的来,而解析阶段不一定,它可以在初始化阶段之后开始,这是为 ...
分类:
其他好文 时间:
2018-03-16 18:38:49
阅读次数:
117