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

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

作者: 东方灵龙 | 来源:发表于2019-05-19 21:29 被阅读0次

类加载过程

首先

首先,jvm在执行时,遇到一个新的类时,会到内存中的方法区去找class文件,如果找到就直接拿来用,如果没有找到,就会到硬盘中去找到这个class文件,将类文件加载到方法区,在类加载时,静态成员变量加载到方法区的静态区域,非静态成员变量加载到方法区的非静态区域,加载静态成员变量的时候,会根据书写的顺序,将所有的静态成员变量加载到静态方法区,然后给所有的静态成员变量赋默认值,赋默认值后,会根据静态成员变量书写的位置,给静态成员变量赋显示值,和执行静态代码。当执行完所有的静态代码块时,类才算加载完成。

然后具体步骤
  1. JVM会先去方法区中找有没有相应类的.class存在。如果有,就直接使用;如果没有,则把相关类的.class加载到方法区。
  2. 在.class加载到方法区时,会分为两部分加载:先加载非静态内容,在加载静态内容。
  3. 在加载非静态内容:把.class中的所有非静态内容加载到方法区下的非静态区域内
  4. 加载静态内容:
    4.1. 把.class中所有静态内容加载到方法区下的静态区域内。
    4.2. 静态内容加载完成之后,对所有的静态变量进行默认初始化。
    4.3. 所有的静态变量默认初始化完成之后,再进行显示初始化。
    4.4. 当静态区域下的所有静态变量显示初始化完后,执行静态代码块。
  5. 当静态区域下的静态代码块,执行完之后,整个类的加载就完成了。

对象创建过程

  1. 在堆内存中开辟一块空间。
  2. 给开辟空间分配一个地址。
  3. 把对象的所有非静态成员加载到所开辟的空间下。
  4. 所有的非静态成员加载完成之后,对所有非静态成员变量进行默认初始化。
  5. 所有非静态成员变量默认初始化完成之后,调用构造函数。
  6. 在构造函数入栈执行时,分为两部分:先执行构造函数中的隐式三步,在执行构造函数中书写的代码。
    6.1. 隐式三步:
      6.1.1. 执行super语句
      6.1.2. 对开辟空间下的所有非静态成员变量进行显示初始化
      6.1.3. 执行构造代码块
    6.2. 在隐式三步执行完之后,执行构造函数中书写的代码
  7. 在整个构造函数执行完并弹栈后,把空间分配的地址赋值给一个引用对象

相关文章

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

    类加载过程 首先 首先,jvm在执行时,遇到一个新的类时,会到内存中的方法区去找class文件,如果找到就直接拿来...

  • 《深入理解Java虚拟机》学习笔记(二)(Java对象的创建、内

    对象 对象创建 对象创建的过程 类加载过程包括加载、验证、准备、解析、初始化、运行和卸载 名次解释 指针碰撞:Ja...

  • Java类加载机制和对象创建过程

    Java类加载机制和对象创建过程 1、类加载 类加载的时机 ​ 类加载,即虚拟机加载.class文件。什么时候虚拟...

  • Java基础 (20) 类加载

    1)类加载机制谈谈对ClassLoader(类加载器)的理解2)JVM加载时机与加载过程3)对象创建过程 一. C...

  • Java 类的加载过程对象的创建过程

    1.类加载过程及对象创建过程 1.1 类加载过程: 1, JVM会先去方法区中找有没有相应类的.class存在。如...

  • java对象的创建过程是什么

    java对象的创建过程是什么 java对象的创建过程: 类加载检查-->分配内存-->初始化零值-->设置对象头-...

  • 2019-08-18

    创建对象的过程 ①类加载检查: JVM将类加载过程分为五个步骤: 1) 装载:查找并加载类的二进制数据 ; 2)...

  • 深入理解Java虚拟机读书笔记 七

    类加载过程 类对象和普通对象是不同的,类对象是在类加载的时候完成的,是jvm创建的并且是单例的,作为这个类和外界交...

  • 类加载过程

    创建类加载过程 将创建对象所属类加载到方法区  如果对应类有父类,将先加载父类  修饰的静态变量随着类的加载进方法...

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

    类的加载: 类的加载路线差不多是这样的: 加载->链接(验证->准备->解析)->初始化->使用->卸载 加载:会...

网友评论

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

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