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

483. Java 反射 - 调用构造器

文章目录

  • 483. Java 反射 - 调用构造器
    • 1. 定位构造器 (Locating Constructors)
    • 2. 示例:获取 `String` 类的构造器
      • 输出结果(JDK 23 中部分示例):
    • 3. 获取特定构造器
    • 4. 调用构造器创建实例
    • 5. 总结

483. Java 反射 - 调用构造器

在反射中,Constructor类代表某个构造方法。
通过它,我们不仅可以获取构造器的修饰符、参数类型、异常,还可以用它来创建对象实例


1. 定位构造器 (Locating Constructors)

和字段、方法类似,Class提供了 4 种方式来获取构造器:

API 方法返回多个?包含私有构造器?
getConstructor(Class...)❌ 否,只返回public
getDeclaredConstructor(Class...)✅ 是
getConstructors()✅ 是,只返回public
getDeclaredConstructors()✅ 是,包含private

📌 注意:构造器不会被继承,所以只能获取该类本身声明的构造方法。


2. 示例:获取String类的构造器

Class<?>c=String.class;Constructor<?>[]constructors=c.getDeclaredConstructors();System.out.println("# constructors = "+constructors.length);for(Constructor<?>constructor:constructors){System.out.println("constructor = "+constructor);}

输出结果(JDK 23 中部分示例):

# constructors=19constructor=publicjava.lang.String(java.lang.StringBuilder)constructor=privatejava.lang.String(char[],int,int,java.lang.Void)constructor=publicjava.lang.String(byte[],java.lang.String)throwsjava.io.UnsupportedEncodingExceptionconstructor=publicjava.lang.String(char[])constructor=publicjava.lang.String(java.lang.String)constructor=publicjava.lang.String()...

📌说明

  • String类在 JDK 中有 19 个构造器,包括公有私有
  • getDeclaredConstructors()能拿到全部,而getConstructors()只能看到public

3. 获取特定构造器

例如,找到接收字节数组的构造器:

Class<?>c=String.class;Constructor<?>constructor=c.getConstructor(byte[].class);System.out.println("constructor = "+constructor);

输出结果:

constructor=publicjava.lang.String(byte[])

📌关键点

  • byte[].class表示字节数组类型
  • 这和int.classString.class的用法一致

4. 调用构造器创建实例

Constructor.newInstance(Object... initargs)可以用来创建对象。

示例:用字节数组构造String

byte[]data="Hello".getBytes();Constructor<String>constructor=String.class.getConstructor(byte[].class);Stringstr=constructor.newInstance(data);System.out.println(str);

输出:

Hello

📌说明

  • 通过反射构造出的对象和new String(byte[])效果完全一样
  • 如果构造器是私有的,需要调用setAccessible(true)才能使用

5. 总结

  • Constructor类让我们能查看和调用构造器
  • getConstructors()/getDeclaredConstructors()区别 → 是否包含私有构造器
  • newInstance(args...)用于真正创建对象
  • ✅ 如果构造器是私有的 → 需要setAccessible(true)
  • ✅ 构造器不继承,只能访问类自身声明的
http://www.jsqmd.com/news/1321249/

相关文章:

  • Cheat Engine核心原理与实战:从内存扫描到代码注入的逆向工程入门
  • 【GNSS】网络安全——“走过场”还是“真防护”?
  • 2026海康3D相机供应商优选璟湾科技,深耕3D视觉引导方案、六轴机器人及上下料成套服务 - 栗子测评
  • 专业的大虾 烟丝微波烘干机
  • Linux 硬盘分区与存储管理完全指南
  • 2026年8月瓷砖抗污王品牌哪家好?劲牛超抗污瓷砖脱颖而出 - 米諾
  • 3步完成微信聊天记录永久保存:WeChatMsg开源工具全攻略
  • 护照中文翻译件如何办?外籍护照在华合规翻译办理攻略! - 指上通
  • 边缘计算分布式推理实战:将大模型部署到树莓派与工业盒子集群
  • Origin2021安装全攻略:从环境配置到错误排查的完整解决方案
  • MTK Camera技术栈深度解析:从驱动移植到图像质量调试实战
  • 2026长春家装市场靠谱品牌指南:长春海豚装饰设计中心匠心解读 - 章鱼智讯
  • 积分制后八月首日从字节薅羊毛统计
  • Day16 高级玩法-拦截并获取网络请求
  • 2026榆林漏水检测维修本地口碑榜 TOP5推荐-专业仪器精准测漏-正规防水补漏公司推荐:卫生间/厨房/屋顶/阳台/外墙渗漏水检测师傅上门 - 吉林同城获客
  • 杭州家企资产隔离方案全解:徐立海律师婚前婚内财产合规服务 - 资讯综合
  • MUSA开发者大赛丨算子挑战赛S2赛季正式开启!
  • 旧包积灰别浪费,长沙持证团队验货,对标行情公正变现 - 好物测评局
  • 如何快速搭建全自动医院挂号系统:3步终极指南
  • 2026 云原生后端架构演进:事件驱动、虚拟线程与 AI Agent 内嵌,三驾马车如何重塑技术栈
  • 深度解析剪映自动化接口:基于JianYingApi的实战架构指南与程序化控制实现
  • 大模型API调用实战:从原理到工程化,解决成本与稳定性难题
  • 梦笔记2260802
  • 零信任架构落地指南:企业网络安全边界重构与实践
  • 2026年永康门窗厂可参考的爆品策划品牌选择思路 - 奔跑123
  • GitHub源码处理提速 一趟扫描反而更慢
  • 全国环评公司哪家靠谱:4家综合型服务机构信息盘点参考 - 深度智识库
  • 2026年长春空调维修服务商挑选攻略:泰达机电及优质企业服务梳理 - 比奇堡111
  • 2026铜川漏水检测维修本地口碑榜 TOP5正规推荐-专业仪器精准测漏-正规防水补漏公司推荐:卫生间/厨房/屋顶/阳台/外墙渗漏水检测师傅上门 - 吉林同城获客
  • 2026国内单相变压器公司排行 解决选型困惑 适配多场景需求 - 品牌品鉴馆