美文网首页
类的加载和对象的创建过程

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

作者: 机器不能学习 | 来源:发表于2018-09-28 17:42 被阅读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

    相关文章

      网友评论

          本文标题:类的加载和对象的创建过程

          本文链接:https://www.haomeiwen.com/subject/xtbpoftx.html