Java 对象创建过程十步法!你get到了吗?

Java 中对象的创建过程可以概括为十个步骤,从类加载到实例化对象。

下面详细讲解一下每个步骤:

1. 类加载:

Java 虚拟机在加载类时,会检查类的字节码,并将其加载到内存中。类加载的过程包括加载、连接(验证、准备、解析)和初始化三个阶段。在这个阶段,虚拟机会根据类加载器的委托模型,根据类的全限定名查找并加载类的字节码文件。

2. 找到对应的类文件:

在类加载阶段,虚拟机会根据类的全限定名从类路径中查找对应的类文件(.class 文件)。类路径可以由 CLASSPATH 环境变量指定,也可以通过类加载器动态添加。

3. 解析类文件:

虚拟机在加载类文件后,会对其进行解析。解析的过程包括将类和接口的符号引用转换为直接引用,例如将类名转换为直接指向内存中类结构的引用。

4. 分配内存空间:

一旦类文件被加载并解析,虚拟机会为类的实例分配内存空间。内存分配的方式可以是在堆上分配,也可以是在栈上分配,取决于对象的生命周期和作用域。

5. 初始化默认值:

在内存分配后,虚拟机会为对象的实例变量赋予默认值。对于基本数据类型,这些默认值是 0、0.0、false 等;对于引用类型,默认值是 null。

6. 执行构造方法:

一旦内存空间分配和默认值设置完成,虚拟机会调用对象的构造方法来初始化对象。构造方法是类中用于初始化对象状态的特殊方法,通常会在对象创建时被调用。

7. 设置对象头:

在对象创建后,虚拟机会为对象分配对象头(Object Header)。对象头包含了对象的元信息,例如对象的哈希码、锁状态、GC 标记等。对象头的大小取决于具体的虚拟机实现。

8. 设置引用关系:

一旦对象头设置完成,虚拟机会将对象的引用传递给变量或者其他对象。这个过程通常发生在构造方法中,通过 this 关键字来引用当前对象,或者通过其他对象的方法将对象传递给其他对象。

9. 执行构造方法体:

在设置引用关系后,虚拟机会执行构造方法体中的代码。构造方法体包括了类中定义的构造方法的具体实现,用于初始化对象的状态和执行其他必要的操作。

10. 返回对象引用:

最后,虚拟机会返回对象的引用,以便程序可以使用该对象进行后续的操作。对象的引用可以存储在变量中,作为方法的返回值,或者作为其他对象的属性。

总的来说,Java 对象的创建过程涉及类加载、类文件解析、内存分配、默认值设置、构造方法调用、对象头设置、引用关系建立、构造方法体执行和对象引用返回等多个步骤。这些步骤共同构成了对象创建的完整过程,是理解 Java 对象模型和内存管理机制的关键。

黑马程序员免费预约咨询

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/594559.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Amine-PEG-Amine,956496-54-1在生物成像、生物传感器等领域具有广泛的应用

【试剂详情】 英文名称 Amine-PEG-Amine,NH2-PEG-NH2 中文名称 氨基-聚乙二醇-氨基,氨基PEG氨基, 双端氨基聚乙二醇 CAS号 956496-54-1 外观性状 由分子量决定,液体或者固体 分子量 0.4k,0.6k,1k&…

【JAVA |开篇】JAVA入门及JDK环境配置

目录 一、JIAVA语言 二、Java开发环境安装 三、初识Java的main方法 四、注释 一、JIAVA语言 Java 是一种优秀的程序设计语言 ,它具有令人赏心悦目的语法和易于理解的语义 Write once, Run anywhere(这句话体现了JAVA语言的核心,一次运行 任…

Vue从入门到精通-14-Vue组件

子组件的定义和注册 我们在本文的第一段中,通过Vue.component形式定义的是全局组件。这一段中,我们来讲一下子组件。 在父组件中定义子组件 比如说,一个账号模块是父组件,里面分为登陆模块和注册模块,这两个晓得模块…

ubuntu中的docker记录(3)——如何安装nvidia-docker以更好地支持GPU加速计算应用程序的运行

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、nvidia-docker2的安装1. 安装docker2. 安装nvidia-docker2(1) 添加密钥(2) 更新软件列表(3) 安装nvidia-docker2(4) 测试nvidia-docker2 二、可能的报错及解…

专家解读 | NIST网络安全框架(1):框架概览

随 着信息技术的快速发展,组织面临着越来越严峻的网络安全挑战。NIST网络安全框架(NIST Cybersecurity Framework,CSF)是一个灵活的综合性指南,旨在协助各类组织建立、改进和管理网络安全策略,以加强网络安…

leetCode81. 搜索旋转排序数组 II

leetCode81. 搜索旋转排序数组 II 题目思路 可以二分后的具体思路见我的上篇博客 搜索旋转排序数组 代码 class Solution { public:bool search(vector<int>& nums, int target) {if(nums.empty()) return false;int R nums.size() - 1;while(R > 0 &&…

LLMs:《Better Faster Large Language Models via Multi-token Prediction》翻译与解读

LLMs&#xff1a;《Better & Faster Large Language Models via Multi-token Prediction》翻译与解读 目录 《Better & Faster Large Language Models via Multi-token Prediction》翻译与解读 Abstract 2、Method方法 Memory-efficient implementation 高效内存实…

LabVIEW数据库访问技术

LabVIEW数据库访问技术 在当前的信息化时代&#xff0c;数据管理与分析在各个领域中起着重要的作用。特别是在工业、科研等领域&#xff0c;对于数据的快速准确获取、处理和分析需求日益增加。LabVIEW作为一种图形化编程语言&#xff0c;以其直观、高效的特点&#xff0c;在自…

【数据分析】这些年我发过的微信朋友圈

TencentRecordAnalysisV1.0.3.zip 蓝奏云&#xff1a;链接:链接TencentRecordAnalysis (lanzoub.com)密码:9hww 朋友圈还是以本行业岩土、工作相关的内容居多。 对于一个不怎么发圈的人来说&#xff0c;这几天有点反常&#xff0c;这几天大概是我成功的开发了几个失败的GPT应用…

打造亚马逊爆款秘诀:流量、排名与自养号测评的完美结合

亚马逊是一个产品为王的平台&#xff0c;只要我们的产品好&#xff0c;就会有更多的流量&#xff0c;有流量还怕我们的产品卖不出去&#xff1f;身为新手我们店无流量该怎么办&#xff0c;今天教给你们五个获取流量的方法。 1.自然检索 那是我们常说的自然流量&#xff0c;通…

DBCHM 数据库 CHM 文档生成工具

介绍 DBCHM 是一款数据库文档生成工具&#xff01; 该工具从最初支持chm文档格式开始&#xff0c;通过开源&#xff0c;集思广益&#xff0c;不断改进&#xff0c;又陆续支持word、excel、pdf、html、xml、markdown等文档格式的导出。 支持的数据库 SqlServerMySQLOraclePos…

拥抱新质生产力,助力新型工业化!CMM电子展暨IARS机器人展5月东莞盛大起航

2024年5月15-17日&#xff0c;东浩兰生会展集团旗下CMM电子展&#xff06;IARS机器人展将在广东现代国际展览中心&#xff08;东莞厚街&#xff09;举办。展会面积达50000平方米&#xff0c;展示品牌700余个&#xff0c;同期论坛峰会30余场&#xff0c;预计专业观众超50000人次…

肆拾玖坊商业模式分析,新品牌如何采用合伙人模式起盘

坐标&#xff1a;厦门&#xff0c;我是易创客运营肖琳 深耕社交新零售行业10年&#xff0c;主要提供新零售系统工具及顶层商业模式设计、全案策划运营陪跑等。 比茅台盈利模式还牛逼的肆拾玖坊&#xff0c;所有男人都逃不出它的圈套&#xff01;只靠49个男人&#xff0c;用一套…

软考信息系统项目管理师论文突然单独考,其实影响没有想象的大

五一假期的前一天&#xff0c;辽宁省软考办发布了一则通知&#xff0c;安排了辽宁省的软考批次安排&#xff0c;从标题看不出来有用的信息&#xff0c;但是干货是埋在正文中的。我先把辽宁软考办的全文给你附上如下&#xff0c;具体的解读后面我会一一道来。 敲重点来了&#x…

笔记13-OSError: [Errno 24] Too many open files

文章目录 参考文献失败尝试系列查看发现&#xff0c;似乎是因为线程数有限制 修改配置先查查看 增加文件数限制&#xff0c;然后使用命令运行&#xff08;成功&#xff09; 参考文献 Linux 最大可以打开多少文件描述符&#xff1f; OSError: [Errno 24] Too many open files错…

解决在C#中方向键对控件焦点的控制

不要犹豫直接把下面这个程序复制进去就好了&#xff0c;不用担心0个引用&#xff0c;哈哈&#xff0c;可以的 public partial class MainForm : Form {public MainForm(){InitializeComponent();}protected override bool ProcessDialogKey(Keys keyData){// 检查是否是方向键…

基于springboot实现实习管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现实习管理系统演示 摘要 近年来&#xff0c;信息化管理行业的不断兴起&#xff0c;使得人们的日常生活越来越离不开计算机和互联网技术。首先&#xff0c;根据收集到的用户需求分析&#xff0c;对设计系统有一个初步的认识与了解&#xff0c;确定实习管理系统…

【PX4-AutoPilot教程-TIPS】Matlab使用ROS Toolbox编译MAVROS2消息报错缺少geographic_msgs消息

Matlab使用ROS Toolbox编译MAVROS2消息报错缺少geographic_msgs消息的解决方法 问题描述解决方法 环境&#xff1a; MATLAB : R2022b ROS Toolbox : 1.6 Windows &#xff1a;Windows 10 22H2 ROS &#xff1a;ROS2 Foxy 问题描述 在使用Matlab的ROS Toolbox工具箱编译与…

JAVA基础之Swing窗体的几种布局

1、边框布局BorderLayout 特点&#xff1a;5个方位&#xff08;东&#xff08;East&#xff09;南&#xff08;north&#xff09;西(west)北(south)中(center)&#xff09; 是一种简单的布局策略。 使用时&#xff0c;应将其看成一个“组件”。 同样&#xff0c;首先应通…