当前位置:首页 > 数码 > Java类的加载顺序 (java类的创建和使用)

Java类的加载顺序 (java类的创建和使用)

admin7个月前 (04-15)数码56

1、虚构机初次加载类时,会对静态初始块,静态对象,静态方法启动一次性初始化。

2、只要调用new方法时才会创立实例。

3、类实例创立环节:首先口头父类初始化块局部,而后是父类的结构方法。而后是子类的初始化快和结构方法。

4、类实例销毁时,先销毁子类局部,在销毁父类局部。

打印内容:

123a4

实例化对象的环节:

1.审核类能否加载,假设没有加载就加载这个类,要加载一切父类;

懒式加载(按需加载):假设第一次性用到加载,只加载一下.经过ClassPath制订的门路寻觅类文件(.class)加载以后是一个对象,类型是class.取得这个类对象:student.class-->class实例

2.在内存堆中调配对象空间.递归调配一切父类和子类属性空间.先父类型再子类型,属性自动智能初始化.智能初始化为"0"值;

3.启动属性的赋值;

4.递归调用父类结构器.(自动调用父类无参结构器);

5.调用本类结构器

编程思维上是这么形容的:

1、当某个型别为Dog(这里用Dog示意一个类)的对象初次被发生进去,或是当classDog的static函数或static数据成员初次被访问,java直译器必定查找环境变量classpath所指定的位置,找出Dog.class。

2、一旦Dog.class被装载,他的一切static举措就会被口头起来。因此他的static初始化举措只会出现一次性,就是在class对象初次被装载时。

3、当你newDog()时,结构环节会先为Dog对象在heap上调配足够的存储空间。

4、这块存储空间会被清为0,并智能将Dog对象内一切附属基本型别的数据设为缺省值(对数字来说是0),并将references设为null。

5、口头一切出现于数据定义处的初始化举措。

6、口头结构函数。

控制台输入结果:

thisisstaticmethod~0thisisstaticblock1thisisTestInstanceInit'sconstructor~

假设有一个变量怎样处置呢:

控制台输入结果:静态变量静态初始化块变量初始化块结构器


java程序运行的五个步骤

1、Java程序从源文件创建到程序运行要经过两大步骤:1、源文件由编译器编译成字节码(ByteCode) 2、字节码由java虚拟机解释运行。因为java程序既要编译同时也要经过JVM的解释运行,所以说Java被称为半解释语言(semi-interpreted language)。

第一步(编译): 创建完源文件之后,程序会先被编译为文件。Java编译一个类时,如果这个类所依赖的类还没有被编译,编译器就会先编译这个被依赖的类,然后引用,否则直接引用,这个有点像make。如果java编译器在指定目录下找不到该类所其依赖的类的文件或者源文件的话,编译器话报“cant find symbol”的错误。

Java类

编译后的字节码文件格式主要分为两部分:常量池和方法字节码。常量池记录的是代码出现过的所有token(类名,成员变量名等等)以及符号引用(方法引用,成员变量引用等等);方法字节码放的是类中各个方法的字节码。

第二步(运行):java类运行的过程大概可分为两个过程:1、类的加载 2、类的执行。需要说明的是:JVM主要在程序第一次主动使用类的时候,才会去加载该类。也就是说,JVM并不是在一开始就把一个程序就所有的类都加载到内存中,而是到不得不用的时候才把它加载进来,而且只加载一次。

2、下面是程序运行的详细步骤:

类加载的生命周期

一个类型(泛指类或接口)从被加载到虚拟机内存,到卸载出内存为止,整个生命周期将会经历 加载 、 验证 、 准备 、 解析 、 初始化 、 使用和 卸载七个阶段,其中验证、准备、解析三个阶段合并称为 连接 。

其中,加载、验证、准备、初始化和卸载这五个阶段的顺序是确定的,类型的加载过程必须按照此顺序(加载和连接阶段会交叉进行,且加载开始时间始终早于连接)。

解析的位置并不固定 。某些情况下,它可以在初始化阶段之后开始,目的是 支持 Java 语言的运行时绑定特性 (也成为动态绑定和晚期绑定)。

Java 虚拟机规范未规定什么情况下需要开始类加载过程的第一个阶段 加载 ,可由虚拟机具体实现自由把握。

初始化阶段则严格规定有且仅有六种情况需要即刻对类进行 初始化 :

对于这六种会触发类型进行初始化的场景,其行为称为 主动引用 。除此之外,所有引用类型的方式都不会触发初始化,称为 被动引用 。 以下三种场景即为被动引用的典型场景:

另外,接口初始化时,不要求其父接口全部都完成初始化,只有使用到父类时才会进行初始化。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: Java类