Java创建对象过程:类的初始化和实例化
文章目录
- 前言
- 一、类的初始化
- 二、类的实例化
前言
Java对象的创建过程往往包括类初始化和类实例化两个阶段。类的初始化在前、类的实例化在后。
注意:这与spring的bean正好相反,spring的bean的生命周期,主要是先进行实例化java对象,然后在进行操作属性、最后进行初始化,这里初始化并不是java对象的初始化,而是spring的参数的初始化(initMethod、afterPropertiesSet)等。(@PostConstruct是前置拦截初始化方法)
一、类的初始化
是完成程序执行前的准备工作,初始化相关静态代码块和赋值,并分配空间,初始化只在类加载的时候执行一次。
其中类加载具体过程详见:加载 >> 验证 >> 准备 >> 解析 >> 初始化 >> 使用 >> 卸载
类的初始化顺序参考如下:
二、类的实例化
实例的构造器调用()、分配内存、属性值得定制化赋值机制
类实例化过程
检测类是否被加载没有加载的先加载→为新生对象分配内存→将分配到的内存空间都初始化为零值→对对象进行必要的设置(对象头)→执行方法把对象进行初始化:
- 检测类是否被加载
- 为新生对象分配内存
- 确定对象内存大小
- 对象头:大小确定 与类无关 与操作系统有关,包括标记字段和类型指针。
- 实例数据
即使父类的实例字段被子类覆盖或者被private修饰,都照样为其分配内存,相同宽度的字段会分配在一起,其次,父类的字段在子类之前赋值和初始化。 - 对齐填充
- 初始化零值
- 对象的访问定位
- 执行init方法
创建对象的几种方式:
- 使用new关键字
- Class对象的newInstance()方法
- 构造函数对象的newInstance()方法
- 对象反序列化
- Object对象的clone()方法
- 使用Unsafe类创建对象
参考引用:
虚拟机研究系列-你真正掌握了Java对象创建的流程吗?
java类的初始化和实例化区别
java创建对象的过程详解(从内存角度分析)
Java创建对象过程:类的初始化和实例化相关推荐
- java初始化实例化_Java对象的创建过程:类的初始化与实例化
一.Java对象创建时机 我们知道,一个对象在可以被使用之前必须要被正确地实例化.在Java代码中,有很多行为可以引起对象的创建,最为直观的一种就是使用new关键字来调用一个类的构造函数显式地创建对象 ...
- Java对象的创建过程:类的初始化与实例化
一.Java对象创建时机 我们知道,一个对象在可以被使用之前必须要被正确地实例化.在Java代码中,有很多行为可以引起对象的创建,最为直观的一种就是使用new关键字来调用一个类的构造函数显式地创建对象 ...
- java实例化类之后如何赋值_深入理解Java对象的创建过程:类的初始化与实例化...
摘要: 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.在实例化一个对象时,JVM首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类 ...
- java创建对象过程 实例化和初始化
我们先看看类的加载过程,在我们运行java代码时,首先会通过编译器将.java的文件编程成.class文件,之后在通过类加载器将.class文件转为字节码加载到jvm运行时数据区里面,整个加载过程如下 ...
- 深入理解Java对象的创建过程:类的初始化与实例化
摘要: 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.在实例化一个对象时,JVM首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类 ...
- java初始化实例化_java类的初始化和实例化区别
结论: 参考https://blog.csdn.net/qq_43672627/article/details/86616624 类的初始化:是完成程序执行前的准备工作.在这个阶段,静态的(变量,方法 ...
- 那些你还不熟悉的---类的初始化和实例化的初始化过程
面试题: 如下两个类的代码 /*父类对象*/ public class Father{private int i = test();private static int j = method();st ...
- java 虚拟机 初始化_【深入理解Java虚拟机】类的初始化过程
类的初始化过程 类的加载过程.png 加载 将 Class 文件以二进制的形式加载到内存中 验证 校验 Class 文件是否安全,是否被正确的修改等 准备 为类变量申请内存,设置默认值,(初始化变量的 ...
- 类的初始化以及实例化
在类的初始化阶段,虚拟机对类进行初始化,主要对类变量进行初始化.在java中对类变量进行初始化有两种方式: ①声明类变量时指定初始值 ②使用静态初始化块为类变量指定初始化值 声明变量时指定初始值,静态 ...
最新文章
- TC配置文件WCMD.INI详解,只能在ini重修改的配置
- 记录计算顺子(12,3,4或者9,0,1,2)的方法
- 实验吧之NSCTF misc250
- window.addeventlistener 不能调用方法_Java入门第十四课:如何定义”方法“
- jupyter notebook使用opencv的例子_VSCode中使用jupyter notebook
- .net 本地文件管理 代码_Gitee 在线解决代码冲突上线,解决冲突不再需要 Git 命令...
- 那位熟读戈培尔语录的“同仁” 我来与您做次探讨
- FormData 上传文件
- [UESTC SC T3] 蛋糕
- 安卓天天练练(五)CompoundButton
- 巴特沃斯低通滤波器 matlab,基于MATLAB做巴特沃斯低通滤波器..doc
- 简单线性回归的应用及画图(一)
- 向量的方向余弦公式_方向余弦矩阵(DCM)简介
- 全波傅里叶算法计c语言,全周波傅里叶算法
- 什么是Harmony操作系统?华为新操作系统介绍
- 怎样推断server为虚拟机还是物理真机?
- 公众号网站——微信登录
- 多点多地网络改造方案
- 【转】四大Linux图形界面赏析:KDE、Gnome、Xfce、LXDE
- win10中anaconda安装tensorflow时报错Traceback (most recent call last): File “E:\Anaconda3\lib\site-packag