Java,反射创建对象的两种方式
跟着孙哥学Spring,b站:https://www.bilibili.com/video/BV185411477k/?spm_id_from=333.337.search-card.all.click
在Java中,我们可以使用反射来创建对象。这里有两种主要的方式:
1. 使用 Class.forName().newInstance()
方法
这种方式是使用默认的无参数构造函数来创建对象。如果这个类没有默认的无参数构造函数,那么这种方式会抛出异常。
Class<?> clazz = Class.forName("com.baizhiedu.User"); User newInstance = (User) clazz.newInstance();
2. 使用 Constructor.newInstance()
方法
这种方式是通过反射的方式获取类的构造函数,然后通过构造函数来创建对象。这种方式更加灵活,可以用来创建有参数构造函数的对象,也可以用来创建私有构造函数的对象。但是这种方式的代码更复杂,执行效率也比直接使用newInstance
方法低。
Class<?> clazz = Class.forName("com.baizhiedu.User"); Constructor<?> ctor = clazz.getDeclaredConstructor(); User user = (User) ctor.newInstance();
如果你需要创建的对象的构造函数有参数,或者构造函数是私有的,那么你需要使用Constructor.newInstance()
方法来创建对象。例如,如果你的构造函数需要一个String
类型和一个int
类型的参数,你可以这样做:
Constructor<?> ctor = clazz.getDeclaredConstructor(String.class, int.class); User user = (User) ctor.newInstance("username", 25);
在这个例子中,newInstance
方法接收的参数应该与你在getDeclaredConstructor
方法中指定的参数类型相匹配。这样,你就可以创建具有任何你需要的构造函数的新对象了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix