登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
安全
›
Java 创建对象的 6 种方式 + 底层原理(面试必考) ...
Java 创建对象的 6 种方式 + 底层原理(面试必考)
[ 复制链接 ]
高小雨
2 小时前
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
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 做了什么?
检查类加载
堆分配内存
零值初始化
设置对象头
执行构造方法
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
Java
创建
对象
方式
底层
相关帖子
Java虚拟线程详解
IPv6地址获取方式与CH394Q获取全球唯一地址的实现
PipelinR:在Java中实现优雅的CQRS架构
PipelinR:在Java中实现优雅的CQRS架构
PipelinR:在Java中实现优雅的CQRS架构
PipelinR:在Java中实现优雅的CQRS架构
PipelinR:在Java中实现优雅的CQRS架构
Copilot 命令行使用方式介绍(npm)
Java SE 和 Java EE 的核心功能模块
java String为什么不可变
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
Java虚拟线程详解
0
16
榕闹
2026-03-02
业界
IPv6地址获取方式与CH394Q获取全球唯一地址的实现
0
235
米榜饴
2026-03-04
业界
PipelinR:在Java中实现优雅的CQRS架构
0
943
秤陷曲
2026-03-05
业界
PipelinR:在Java中实现优雅的CQRS架构
0
61
尹心菱
2026-03-05
业界
PipelinR:在Java中实现优雅的CQRS架构
0
925
搜娲瘠
2026-03-05
业界
PipelinR:在Java中实现优雅的CQRS架构
0
40
恙髡
2026-03-05
业界
PipelinR:在Java中实现优雅的CQRS架构
0
8
铜坠匍
2026-03-05
业界
Copilot 命令行使用方式介绍(npm)
0
249
冈欤寨
2026-03-05
业界
Java SE 和 Java EE 的核心功能模块
0
386
蔬陶
2026-03-05
业界
java String为什么不可变
0
856
髡芯
2026-03-05
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
高小雨
2 小时前
关注
0
粉丝关注
30
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991125
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
宋子
9888
6
韶又彤
9910
7
闰咄阅
9993
8
刎唇
9995
9
蓬森莉
9871
10
遗憩
10006
查看更多
今日好文热榜
836
C#/.NET/.NET Core优秀项目和框架2026年2月
565
为什么 AI 能赢世界冠军,却开不好车?——
894
AI Agent框架探秘:拆解 OpenHands(11)--
540
MAUI项目在Android平台通过U盘实现软件更新
813
前后端交互中时间的格式化与解析,将会面临
683
MyBatis-配置文件解读及MyBatis为何不用编
155
gcsfuse中的锁与偏序理论
855
java String为什么不可变
965
Java 创建对象的 6 种方式 + 底层原理(面
133
# 纽约出行机票全攻略:特价预订+机场指南
956
Coolify: Vercel 的开源版私有化部署平替版
930
探索JavaScript的秘密令牌:独一无二的`Sym
191
MySQL InnoDB Cluster节点重新加入集群踩坑
306
Kubernetes Dashboard部署
646
长春市万佳医院|医疗场景数字化管理提效
392
PicoServer 跨平台 Web 实战系列(二) 路由
857
.NET SqlSugar多线程下SqlSugarClient 的线
934
通义深度搜索-API概览
680
杨辉三角原理及PHP代码实现
386
Java SE 和 Java EE 的核心功能模块