类的加载和对象的创建过程

2018-09-28  本文已影响0人  机器不能学习

类的加载:

类的加载路线差不多是这样的:

加载->链接(验证->准备->解析)->初始化->使用->卸载

加载:会根据类是否有条件加载进行加载。一般分为五个条件:1.使用new,调用了类static变量或者是方法  2.使用反射   3.一个类初始化时先初始化其父类  4.运行主类(main)   5.动态语言

有几个情况不会加载:调用父类的static变量或方法,子类不会加载;被动引用不会加载如(Student[] j=new Student[10]);虽然是静态但是用final修饰的常量不加载该类

加载后:通过全限名(包名+类名)找到该类获取其二进制文件  ->  将二进制文件变为方法区中的数据结构 -> 生成一个代表此类的class文件 作为访问入口

链接:验证其是否为java识别文件,并对数据类型等进行检验;为类数据进行内存分配并赋初始值;把符号引用变为直接引用

初始化:初始化过程是执行类构造器<clinit>的执行过程。它会为静态变量赋值,并执行静态代码块。该过程是一个同步过程,单例模式就是利用其特点,在这个过程中创建对象

具体见《深入虚拟机》


对象的创建过程:

1.对象创建时,虚拟机会在堆中给类的实例变量和从父类继承的实例变量分配内存,并且默认初始值

2.执行实例变量和实例代码块

3.执行构造函数

重点讲一下构造函数:

在执行构造函数的时候,先要执行超类的构造函数。知道到达object再返回。

几个题

https://blog.csdn.net/justloveyou_/article/details/72466416

https://blog.csdn.net/justloveyou_/article/details/72466105

上一篇下一篇

猜你喜欢

热点阅读