Java 对象创建过程十步法,你GET到了吗?

本文详细阐述了Java中对象创建的十个步骤,包括类加载、验证、准备、解析、内存分配、初始化、对象头设置、链接和构造方法调用,帮助理解JVM工作原理和优化编程实践。
摘要由CSDN通过智能技术生成

在 Java 编程中,创建对象是一个基本的操作。但是,Java 中对象的创建并不仅仅是通过 new 关键字实例化一个类,而是一个包含了多个步骤的过程。这个过程可以被称为“十步法”,涵盖了从对象的实例化到最终可用的全过程。

第一步:加载类

在 Java 中,对象创建的第一步是加载类。当 Java 虚拟机(JVM)遇到一个类的引用时,它需要检查这个类是否已经加载到内存中。如果没有,JVM 将加载该类。类加载的过程包括:

  • 查找类文件:JVM 根据类的全限定名(包括包路径)在类路径中查找相应的 .class 文件。

  • 加载类文件:一旦找到类文件,JVM 将其加载到内存中,并将其转换为一个 Class 对象,以便后续使用。

第二步:验证类

加载类文件后,JVM 还需要验证类文件的内容,以确保它符合 Java 语言规范和安全性要求。类验证过程包括:

  • 文件格式验证:检查类文件的二进制格式是否符合规范。

  • 语义验证:检查类文件中的字节码是否合法,并且不包含任何不良代码。

  • 字节码验证:检查字节码的行为是否符合 Java 语言规范,以防止潜在的安全漏洞。

第三步:准备类

在类验证完成后,JVM 将为类的静态变量分配内存,并将其初始化为默认值(零值)。这个阶段称为“准备”(Prepare)阶段。需要注意的是,这里分配的内存并不包括对象的实例变量,只包括静态变量。

第四步:解析类

在准备阶段之后,JVM 还需要对类中的符号引用进行解析。符号引用是指在编译期间生成的类名、方法名、字段名等符号,需要在运行时解析为具体的内存地址。这个过程称为“解析”(Resolve)阶段。

第五步:分配内存

在准备阶段分配了类的静态变量内存之后,接下来是为对象的实例变量分配内存。这个阶段包括:

  • 计算对象大小:JVM 根据类的实例变量大小来计算对象需要的内存空间。

  • 分配内存:JVM 在堆内存中为对象分配足够的空间,以便存储对象的实例变量。

第六步:初始化对象

在为对象分配内存后,JVM 将调用类的构造方法来初始化对象。构造方法的初始化过程包括:

  • 调用父类构造方法:如果类有父类,则首先调用父类的构造方法。

  • 初始化实例变量:执行构造方法中的代码,初始化对象的实例变量。

  • 返回对象引用:构造方法执行完成后,返回对象的引用。

第七步:设置对象头

在对象初始化完成后,JVM 还需要在对象头中设置额外的信息,以便在运行时对对象进行管理。对象头中包括对象的哈希码、锁状态、GC 信息等。

第八步:链接对象

链接对象是将对象与 JVM 的各个子系统连接起来,以便在运行时对对象进行访问和操作。这个过程包括:

  • 将对象添加到内存管理系统:将对象添加到 JVM 的垃圾回收系统,以便在对象不再使用时进行回收。

  • 将对象添加到线程管理系统:将对象添加到 JVM 的线程管理系统,以便在多线程环境下对对象进行同步操作。

第九步:调用构造方法

在对象链接完成后,JVM 将调用构造方法的过程也称为“构造对象”。这个阶段是对象创建的最后一步,也是对象变为可用状态的关键步骤。

第十步:返回对象引用

最后一步是将对象的引用返回给程序的调用者,使得程序能够通过该引用访问和操作对象。这样,对象创建过程就完成了。

Java 中对象的创建过程涉及多个步骤,从类加载到对象的初始化、链接和构造,最终到对象的引用返回给程序调用者。这个过程被称为“十步法”,每一步都是确保对象创建正确、可用的关键。深入了解对象创建过程有助于我们更好地理解 Java 虚拟机的工作原理,提高代码编写的效率和质量。

黑马程序员Java零基础视频教程_上部(Java入门,含斯坦福大学练习题+力扣算法题和大厂java面试题)

黑马程序员Java零基础视频教程_下部(Java入门,含斯坦福大学练习题+力扣算法题和大厂java面试题)

  • 15
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值