创建一个对象的过程(new)

https://blog.csdn.net/qq_27495157/article/details/81262921

  1. 首先会有JVM去内存中的 方法区 查找该类的class信息,如果有直接拿来用,如果没有,去磁盘中查找.class文件,并由类加载器(ClassLoader)进行加载到方法区。

  2. 加载时遇到静态成员变量,加载到方法区的静态区域,非静态成员变量加载到非静态区域。然后对静态变量进行默认初始化和显式初始化。静态代码块会在加载时执行,非静态代码块在创建实例时执行。先加载父类,再加载子类。

  3. 静态方法和非静态方法在调用时才会执行。

  4. new一个对象时,在堆内存中开辟一块空间,给开辟的空间分配一个地址,把非静态成员变量加载到开辟的空间下,进行默认初始化。

  5. 调用构造函数,入栈执行,先执行隐式三步:调用super函数,对非静态成员显式初始化,执行构造代码块。再执行构造函数的代码。

  6. 构造函数弹栈,把空间分配的地址赋给引用对象。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 7,897评论 0 27
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,160评论 1 32
  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 1,559评论 0 6
  • 一:java概述: 1,JDK:Java Development Kit,java的开发和运行环境,java的开发...
    慕容小伟阅读 1,851评论 0 10
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,713评论 0 11