当前位置: 首页 > news >正文

Java 创建对象的 6 种方式 + 底层原理(面试必考)

Java 创建对象的 6 种方式(底层 + 面试版)

一、6 种创建方式总览

  • new 关键字
  • Class.newInstance ()(反射,已废弃)
  • Constructor.newInstance ()(标准反射)
  • clone () 克隆
  • 反序列化
  • Unsafe.allocateInstance ()(底层)

二、详细说明(Markdown 格式)

1. new 关键字(最常用)

User user = new User();

  • 调用构造方法
  • 最直观、最常用
  • 触发 JVM 类加载 + 内存分配 + 初始化

2. Class.newInstance ()(反射,废弃)

User user = User.class.newInstance();

  • 反射创建
  • 必须有无参构造
  • JDK9 已废弃

3. Constructor.newInstance ()(推荐反射方式)

Constructor ctor = User.class.getConstructor();
User user = ctor.newInstance();

  • 灵活:支持有参 / 无参
  • 推荐使用
  • 会调用构造方法

4. Object clone ()(克隆)

User user1 = new User();
User user2 = (User) user1.clone();

  • 不调用构造方法
  • 浅拷贝
  • 必须实现 Cloneable 接口

5. 反序列化

ObjectInputStream ois = new ObjectInputStream(...);
User user = (User) ois.readObject();

  • 从流中恢复对象
  • 不调用构造方法
  • 必须实现 Serializable

6. Unsafe.allocateInstance ()(JVM 底层)

Unsafe unsafe = Unsafe.getUnsafe();
User user = (User) unsafe.allocateInstance(User.class);

  • 完全不调用构造方法
  • 只分配堆内存,不初始化
  • 属于 JVM 底层机制

三、哪些调用构造方法?哪些不调用?

✅ 调用构造方法

  • new
  • Class.newInstance()
  • Constructor.newInstance()

❌ 不调用构造方法

  • clone()
  • 反序列化
  • Unsafe.allocateInstance()

四、JVM 创建对象底层流程(面试必考)

  1. 检查类是否已加载
  2. 堆内存分配
  3. 初始化零值(成员变量默认值)
  4. 设置对象头(Mark Word、指针、锁信息、GC年龄)
  5. 执行构造方法 ()

五、Java 对象内存布局(JVM 必考)

对象头(Header)
→ Mark Word
→ 类型指针
实例数据(Instance Data)
→ 成员变量
对齐填充(Padding)
→ 保证 8 字节对齐

六、面试终极答案:new 对象时 JVM 做了什么?

  1. 检查类加载
  2. 堆分配内存
  3. 零值初始化
  4. 设置对象头
  5. 执行构造方法
http://www.jsqmd.com/news/440253/

相关文章:

  • Browser-Use在UI自动化测试中的应用
  • 2026年口碑好的异型铰链公司推荐:90度异型铰链/橱柜异型铰链/165度异型铰链品牌厂家哪家靠谱 - 品牌宣传支持者
  • 英语复试准备
  • PB 级数据存储下的冷热分离架构:基于 LSM-Tree 引擎的存储压缩与查询加速实践
  • 2026年 化工原料厂家推荐排行榜:水处理、电镀、食品级、药用级、危险品、易制毒、易制爆化工原料供应商深度解析 - 品牌企业推荐师(官方)
  • 软件工程课程作业:C++ 书店管理系统二次开发
  • 大模型推理的最后一公里:如何利用 vLLM 与 PagedAttention 技术解决显存碎片化并提升吞吐量?
  • 【AI大模型学习日志8:深度拆解深度求索DeepSeek系列——初创硬核突围的推理与代码开源实力派】
  • 2026年弹力带厂家推荐排行榜:健身弹力带/抗阻训练带/拉伸弹力带,精选男士与体育生训练专业级阻力带品牌 - 品牌企业推荐师(官方)
  • 【题解】P13497 【MX-X14-T7】墓碑密码
  • 国内可信智能体标杆:2026企业级AI智能体平台对比与选型建议
  • 宠物智能喂食专用雷达模块重新定义精准感应
  • 2026年弹弓皮筋厂家推荐排行榜:扁皮筋/乳胶皮筋/弹弓专用皮筋,精选高回弹耐用材质品牌深度解析 - 品牌企业推荐师(官方)
  • 意义经济的操作系统:一人公司经济体如何重塑价值生产与分配——专知智库OPC研究院关于数字时代生产关系的深度观察
  • Flutter 三方库 beamer 的鸿蒙化适配指南 - 掌控 Navigator 2.0 的终极利器、声明式路由实战、鸿蒙级复杂导航架构构建
  • CMake add_custom_xxx说明
  • 2026年真空上料机厂家推荐排行榜:螺旋/气动/连续式/自动/粉体/干粉/颗粒真空上料机及真空吸料机实力品牌深度解析 - 品牌企业推荐师(官方)
  • 扬帆出海:中科恒一能源逐光而行,闪耀意大利国际能源展
  • [软件下载]网站日志分析工具 v1.4.2
  • 筑牢新能源安全防线:电池绝热量热仪选型全景与实战策略 - 品牌推荐大师
  • http模块
  • Spring开发系列教程(27)——使用WebSocket
  • 基恩士KV7500程序 基恩士PLC 基恩士KV7500,基恩士触摸屏,搭载KV-SH04PL...
  • Spring开发系列教程(28)——集成第三方组件
  • 启用Spring Initializr 快速创建Maven管理的springBoot方案
  • Spring Boot 3.2+ GraalVM原生镜像构建实战(JDK21+GraalVM 23.2实测)
  • leetcode76. 最小覆盖子串(传引用 unordered_map的慢 可以用数组来代替哈希表)
  • 网易智企肖钰妍:未来三年,服务营销领域 Agent 五大趋势预测
  • 2026省选邮寄
  • 软件开发创新日志 #1项目分析+二次开发