文章目录

  • 前言
  • 一、类的初始化
  • 二、类的实例化

前言

Java对象的创建过程往往包括类初始化和类实例化两个阶段。类的初始化在前、类的实例化在后。

注意:这与spring的bean正好相反,spring的bean的生命周期,主要是先进行实例化java对象,然后在进行操作属性、最后进行初始化,这里初始化并不是java对象的初始化,而是spring的参数的初始化(initMethod、afterPropertiesSet)等。(@PostConstruct是前置拦截初始化方法)

一、类的初始化

是完成程序执行前的准备工作,初始化相关静态代码块和赋值,并分配空间,初始化只在类加载的时候执行一次。
其中类加载具体过程详见:加载 >> 验证 >> 准备 >> 解析 >> 初始化 >> 使用 >> 卸载

类的初始化顺序参考如下:

二、类的实例化

实例的构造器调用()、分配内存、属性值得定制化赋值机制

类实例化过程
检测类是否被加载没有加载的先加载→为新生对象分配内存→将分配到的内存空间都初始化为零值→对对象进行必要的设置(对象头)→执行方法把对象进行初始化:

  • 检测类是否被加载
  • 为新生对象分配内存
  • 确定对象内存大小
  • 对象头:大小确定 与类无关 与操作系统有关,包括标记字段和类型指针。
  • 实例数据
    即使父类的实例字段被子类覆盖或者被private修饰,都照样为其分配内存,相同宽度的字段会分配在一起,其次,父类的字段在子类之前赋值和初始化。
  • 对齐填充
  • 初始化零值
  • 对象的访问定位
  • 执行init方法

创建对象的几种方式

  1. 使用new关键字
  2. Class对象的newInstance()方法
  3. 构造函数对象的newInstance()方法
  4. 对象反序列化
  5. Object对象的clone()方法
  6. 使用Unsafe类创建对象

参考引用:
虚拟机研究系列-你真正掌握了Java对象创建的流程吗?
java类的初始化和实例化区别
java创建对象的过程详解(从内存角度分析)

Java创建对象过程:类的初始化和实例化相关推荐

  1. java初始化实例化_Java对象的创建过程:类的初始化与实例化

    一.Java对象创建时机 我们知道,一个对象在可以被使用之前必须要被正确地实例化.在Java代码中,有很多行为可以引起对象的创建,最为直观的一种就是使用new关键字来调用一个类的构造函数显式地创建对象 ...

  2. Java对象的创建过程:类的初始化与实例化

    一.Java对象创建时机 我们知道,一个对象在可以被使用之前必须要被正确地实例化.在Java代码中,有很多行为可以引起对象的创建,最为直观的一种就是使用new关键字来调用一个类的构造函数显式地创建对象 ...

  3. java实例化类之后如何赋值_深入理解Java对象的创建过程:类的初始化与实例化...

    摘要: 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.在实例化一个对象时,JVM首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类 ...

  4. java创建对象过程 实例化和初始化

    我们先看看类的加载过程,在我们运行java代码时,首先会通过编译器将.java的文件编程成.class文件,之后在通过类加载器将.class文件转为字节码加载到jvm运行时数据区里面,整个加载过程如下 ...

  5. 深入理解Java对象的创建过程:类的初始化与实例化

    摘要: 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.在实例化一个对象时,JVM首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类 ...

  6. java初始化实例化_java类的初始化和实例化区别

    结论: 参考https://blog.csdn.net/qq_43672627/article/details/86616624 类的初始化:是完成程序执行前的准备工作.在这个阶段,静态的(变量,方法 ...

  7. 那些你还不熟悉的---类的初始化和实例化的初始化过程

    面试题: 如下两个类的代码 /*父类对象*/ public class Father{private int i = test();private static int j = method();st ...

  8. java 虚拟机 初始化_【深入理解Java虚拟机】类的初始化过程

    类的初始化过程 类的加载过程.png 加载 将 Class 文件以二进制的形式加载到内存中 验证 校验 Class 文件是否安全,是否被正确的修改等 准备 为类变量申请内存,设置默认值,(初始化变量的 ...

  9. 类的初始化以及实例化

    在类的初始化阶段,虚拟机对类进行初始化,主要对类变量进行初始化.在java中对类变量进行初始化有两种方式: ①声明类变量时指定初始值 ②使用静态初始化块为类变量指定初始化值 声明变量时指定初始值,静态 ...

最新文章

  1. TC配置文件WCMD.INI详解,只能在ini重修改的配置
  2. 记录计算顺子(12,3,4或者9,0,1,2)的方法
  3. 实验吧之NSCTF misc250
  4. window.addeventlistener 不能调用方法_Java入门第十四课:如何定义”方法“
  5. jupyter notebook使用opencv的例子_VSCode中使用jupyter notebook
  6. .net 本地文件管理 代码_Gitee 在线解决代码冲突上线,解决冲突不再需要 Git 命令...
  7. 那位熟读戈培尔语录的“同仁” 我来与您做次探讨
  8. FormData 上传文件
  9. [UESTC SC T3] 蛋糕
  10. 安卓天天练练(五)CompoundButton
  11. 巴特沃斯低通滤波器 matlab,基于MATLAB做巴特沃斯低通滤波器..doc
  12. 简单线性回归的应用及画图(一)
  13. 向量的方向余弦公式_方向余弦矩阵(DCM)简介
  14. 全波傅里叶算法计c语言,全周波傅里叶算法
  15. 什么是Harmony操作系统?华为新操作系统介绍
  16. 怎样推断server为虚拟机还是物理真机?
  17. 公众号网站——微信登录
  18. 多点多地网络改造方案
  19. 【转】四大Linux图形界面赏析:KDE、Gnome、Xfce、LXDE
  20. win10中anaconda安装tensorflow时报错Traceback (most recent call last): File “E:\Anaconda3\lib\site-packag

热门文章

  1. 【h.264】 SPS写入timing相关及openh264实现
  2. LaTeX定制个人简历
  3. 学习博客:【JavaScript】jQuery
  4. GBDC2017全球大数据峰会
  5. MOSFET导通、关断过程详细分析、损耗分析、米勒效应、datasheet解释
  6. Python基于PC版微信实现机器人
  7. android 单手模式 cm,怎么开启单手模式 安卓自定义单手操作模式缔造教程
  8. Windows10下安装Git
  9. base64图片 复制到系统剪切板
  10. Poedu_C语言_20160925_打字母游戏