news 2026/5/15 5:02:25

小红书Java面试被问:java创建对象有哪些方式?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
小红书Java面试被问:java创建对象有哪些方式?

在Java中,创建对象主要有以下五种核心方式,每种方式都有其适用场景:


1. 使用new关键字(最常用)

java

// 调用构造方法 Person person = new Person();
  • 特点:直接调用类的构造器,触发类加载(如果未加载)、分配内存、初始化等完整过程。

  • 场景:日常开发中最常用的方式。


2. 使用反射机制(Reflection)

通过Class类的newInstance()或构造器来创建对象。

java

// 方式一:Class.newInstance()(JDK9已废弃,推荐使用构造器) Class<Person> clazz = Person.class; Person person = clazz.newInstance(); // 需要无参构造,且权限为public // 方式二:Constructor.newInstance()(更灵活) Constructor<Person> constructor = clazz.getConstructor(String.class); Person person = constructor.newInstance("张三");
  • 特点

    • 可以在运行时动态创建对象。

    • 可以调用私有构造器(通过setAccessible(true))。

  • 场景:框架设计(如Spring IOC)、动态代理、工具类封装。

篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafc

需要全套面试笔记及答案
【点击此处即可/免费获取】​​​


3. 使用clone()方法(复制现有对象)

java

public class Person implements Cloneable { @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); // 浅拷贝 } } // 使用 Person p1 = new Person(); Person p2 = (Person) p1.clone();
  • 特点

    • 不调用构造器,直接复制内存数据。

    • 需要实现Cloneable接口(标记接口),否则抛CloneNotSupportedException

    • 默认为浅拷贝,需重写clone()实现深拷贝。

  • 场景:复制复杂对象、避免重复创建开销(如原型模式)。


4. 使用反序列化(Deserialization)

java

// 对象必须实现 Serializable 接口 try (ObjectInputStream ois = new ObjectInputStream( new FileInputStream("person.dat"))) { Person person = (Person) ois.readObject(); // 通过字节流重建对象 }
  • 特点

    • 完全不调用构造器,通过二进制数据还原对象。

    • 对象需实现Serializable接口。

  • 场景:网络传输、持久化存储恢复对象(如缓存恢复、RPC调用)。


5. 使用工厂方法/构建器模式(间接创建)

java

// 静态工厂方法 public class Person { public static Person createWithName(String name) { Person p = new Person(); p.setName(name); return p; } } Person p = Person.createWithName("李四"); // Builder模式(Lombok @Builder) Person person = Person.builder() .name("王五") .age(25) .build();
  • 特点

    • 封装对象创建逻辑,提供更友好的API。

    • 本质上仍调用new或反射,但对外隐藏细节。

  • 场景:复杂对象构造、可选参数多、需要创建控制(如单例、缓存池)。


特殊说明:其他边缘方式

  • Unsafe.allocateInstance():直接分配内存而不初始化对象(Unsafe类,JVM内部使用,不推荐业务代码使用)。

  • 动态代理(Proxy.newProxyInstance):创建接口的代理对象,属于反射的延伸应用。


对比总结

方式是否调用构造器适用场景
new✅ 调用常规对象创建
反射✅ 可选调用框架、动态加载
clone()❌ 不调用复制现有对象
反序列化❌ 不调用持久化恢复、远程传输
工厂/Builder✅ 间接调用复杂构造、代码可读性

篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafc

需要全套面试笔记及答案
【点击此处即可/免费获取】​​​


面试延伸问题

如果面试官深入追问,可以准备以下要点:

  1. newnewInstance()区别

    • new是关键字,编译时确定;newInstance()是反射方法,运行时动态创建。

  2. 反序列化如何破坏单例

    • 反序列化会创建新对象,可通过实现readResolve()方法返回单例实例来防御。

  3. 深拷贝 vs 浅拷贝如何实现

    • 浅拷贝:Object.clone()默认复制字段值(引用类型复制地址)。

    • 深拷贝:递归复制引用对象,或通过序列化/反序列化实现。

掌握这些创建方式,不仅有助于面试,更能加深对Java对象生命周期的理解。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 1:13:08

PostgreSql 常用聚合函数

基础准备 CREATE TEMP TABLE demo(id int, v int, t text); INSERT INTO demo VALUES(1, 10, a),(2, 20, b),(3, NULL, c);idvt110a220b3NULLc注意&#xff1a;版本基于 PG 15&#xff0c;全部自带&#xff0c;无需扩展 A. 基础统计 SELECT count(*) AS cnt, -- 3c…

作者头像 李华
网站建设 2026/5/3 13:05:41

露,信息化集成化信号采集与处理系统信息化集成化信号采集处理系统 机能生理实验系统 信息化集成化生物信号采集与处理系统

一体化生物机能实验系统核心由可移动实验平台、生物信号采集处理系统等四大功能模块构成。该系统将多项实验核心功能与管理模块进行融合&#xff0c;具体涵盖基础实验操作平台、高精度生物信号采集处理单元、附带动物体温实时监测功能的动物呼吸机&#xff0c;以及实验环境监测…

作者头像 李华
网站建设 2026/5/12 12:44:24

文件格式转换神器,牛批了

今天给大家推荐一款非常不错的文件格式转换软件&#xff0c;已经被汉化&#xff0c;没有广高、免费&#xff0c;有需要的小伙伴及时下载收藏。 FileConverter 多媒体格式转换软件 这款工具安装后没有界面&#xff0c;鼠标右键菜单中可以找到&#xff0c;包含了音频、视频、PDF…

作者头像 李华
网站建设 2026/5/14 12:14:19

宽论视角下量化与价值投资的对立统一之道

在金融投资的广阔领域中&#xff0c;宽论犹如一座灯塔&#xff0c;为投资者指引着方向。宽论中对于量化与价值投资对立统一关系的探讨&#xff0c;为我们理解和运用这两种投资策略提供了全新的视角。深入研究宽论中这一核心观点&#xff0c;对于投资者提升投资水平和盈利能力具…

作者头像 李华
网站建设 2026/5/13 2:14:04

【拯救HMI】色彩在工业HMI中的科学应用:不仅仅是“红停绿行”

颜色是HMI中最强大的视觉工具之一&#xff0c;但也是最容易被误用的。本文将深入探讨色彩心理学、可达性设计&#xff08;色盲友好&#xff09;以及如何建立一套科学、高效的色彩编码体系。色彩的心理暗示&#xff1a;红色&#xff1a; 立即引起注意&#xff0c;用于紧急停止、…

作者头像 李华
网站建设 2026/5/9 18:45:04

软件测试基本流程和方法:从入门到精通

自动化测试在现代软件开发中的崛起 随着软件行业的快速发展&#xff0c;自动化测试已从辅助工具演变为软件开发流程中不可或缺的环节。它不仅提升了测试效率&#xff0c;还显著降低了人为错误&#xff0c;尤其在持续集成/持续部署&#xff08;CI/CD&#xff09;和敏捷开发环境…

作者头像 李华