0

0

在Java里如何创建对象并使用_Java对象实例化方法说明

P粉602998670

P粉602998670

发布时间:2026-02-05 12:25:02

|

384人浏览过

|

来源于php中文网

原创

new 是最直接的对象创建方式,需类非抽象/接口且构造器可访问;反射 newInstance() 已弃用,应改用 getDeclaredConstructor().newInstance();静态工厂更灵活安全,推荐优先使用。

在java里如何创建对象并使用_java对象实例化方法说明

用 new 关键字调用构造方法是最直接的方式

绝大多数 Java 对象都通过 new 实例化,它会触发类的构造方法、分配堆内存、返回引用。只要类不是 abstract 或 interface,且构造方法可访问(public / protected / package-private),就能用。

  • new 后必须跟具体类名和括号,哪怕构造方法无参也要写 (),漏掉会编译报错 error: cannot find symbol
  • 如果构造方法是 private(比如单例的私有构造),外部不能用 new,得走静态工厂或反射
  • 注意:new 每次都新建对象,频繁调用可能引发 GC 压力,高频场景建议结合对象池或复用逻辑

使用 Class.forName().newInstance() 已被弃用,别再用了

Java 9 开始 Class.newInstance() 被标记为 @Deprecated,Java 14 彻底移除。它强制要求无参构造、忽略访问控制、异常包装不清晰,容易在运行时抛 InstantiationExceptionIllegalAccessException

  • 替代方案是用 Class.getDeclaredConstructor().newInstance(),显式获取构造器,可设 setAccessible(true) 访问 private 构造
  • 注意:反射创建对象比 new 慢不少,且绕过编译期检查,仅在框架、测试、动态加载等必要场景用
  • 如果类没无参构造,newInstance() 直接失败;而新方式可以传参,例如 c.getDeclaredConstructor(String.class).newInstance("hello")

静态工厂方法是更灵活、更安全的替代选择

很多 JDK 类(如 LocalDateTime.of()Optional.of()Boolean.valueOf())和主流库(Guava、Jackson)都用静态工厂而非 public 构造器。它不强制新建实例,可返回缓存对象、子类实例或 null 安全封装。

超能文献
超能文献

超能文献是一款革命性的AI驱动医学文献搜索引擎。

下载
  • 工厂方法名可自解释,比如 ValueObject.fromMap(map)new ValueObject(map) 更易懂
  • 能隐藏实现细节:返回的是接口类型,实际可能是不同子类,调用方无需关心
  • 避免构造参数歧义——多个重载构造器易混淆,而 of()withXXX()parse() 等命名一目了然

反序列化(JSON / XML / 二进制)本质也是对象创建,但需警惕安全与一致性

像 Jackson 的 ObjectMapper.readValue(json, TypeReference) 或 JAXB 的 Unmarshaller.unmarshal(),底层仍会调用构造器或 setter,但过程对开发者透明。这类方式不走常规控制流,容易忽略副作用。

立即学习Java免费学习笔记(深入)”;

  • 若类有带参构造但没无参构造,Jackson 默认会报 InvalidDefinitionException;需加 @JsonCreator 显式指定
  • 反序列化跳过构造逻辑(如初始化字段、校验参数),可能导致对象处于非法状态,建议配合 @PostConstruct 或自定义 JsonDeserializer
  • XML/JSON 数据来源不可信时,启用 Jackson 的 DefaultTyping.NON_FINAL 可能导致反序列化漏洞(如 gadget chain),生产环境务必关闭自动类型识别
真正难的不是“怎么创建”,而是“该不该新建”——构造开销、线程安全、生命周期管理、是否需要延迟初始化,这些往往比语法本身影响更大。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

426

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

540

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

313

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

78

2025.09.10

guava包作用
guava包作用

guava是一个java库,增强了java标准库,提供更有效率和易于使用的集合、实用程序、缓存和并发工具。想了解更多guava的相关内容,可以阅读本专题下面的文章。

264

2024.05.29

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

584

2023.08.02

java中boolean的用法
java中boolean的用法

在Java中,boolean是一种基本数据类型,它只有两个可能的值:true和false。boolean类型经常用于条件测试,比如进行比较或者检查某个条件是否满足。想了解更多java中boolean的相关内容,可以阅读本专题下面的文章。

354

2023.11.13

java boolean类型
java boolean类型

本专题整合了java中boolean类型相关教程,阅读专题下面的文章了解更多详细内容。

34

2025.11.30

java return合集
java return合集

本专题整合看java中return关键词的用途,语句的使用等等内容,阅读专题下面的文章了解更多详细内容。

0

2026.02.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3.2万人学习

C# 教程
C# 教程

共94课时 | 8.6万人学习

Java 教程
Java 教程

共578课时 | 57.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号