高小雨 发表于 2026-3-5 20:35:02

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 创建对象底层流程(面试必考)


[*]检查类是否已加载
[*]堆内存分配
[*]初始化零值(成员变量默认值)
[*]设置对象头(Mark Word、指针、锁信息、GC年龄)
[*]执行构造方法 ()
五、Java 对象内存布局(JVM 必考)

对象头(Header)
→ Mark Word
→ 类型指针
实例数据(Instance Data)
→ 成员变量
对齐填充(Padding)
→ 保证 8 字节对齐
六、面试终极答案:new 对象时 JVM 做了什么?


[*]检查类加载
[*]堆分配内存
[*]零值初始化
[*]设置对象头
[*]执行构造方法

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

笙芝 发表于 2026-3-8 13:14:55

yyds。多谢分享

支智敏 发表于 2026-3-12 04:30:40

感谢分享,下载保存了,貌似很强大
页: [1]
查看完整版本: Java 创建对象的 6 种方式 + 底层原理(面试必考)