首页 > 编程语言 >Java,反射创建对象的两种方式

Java,反射创建对象的两种方式

时间:2023-12-26 10:25:38浏览次数:38  
标签:反射 Java newInstance 创建对象 clazz User Class 构造函数

跟着孙哥学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方法中指定的参数类型相匹配。这样,你就可以创建具有任何你需要的构造函数的新对象了。

标签:反射,Java,newInstance,创建对象,clazz,User,Class,构造函数
From: https://www.cnblogs.com/zzusjw/p/17927538.html

相关文章

  • Java第十七课_IO流和线程
    1.IO流序列化publicclassPractice01{publicstaticvoidmain(String[]args)throwsIOException,ClassNotFoundException{//一个数据用变量//多个同类型数据用数组//多个不类型数据用对象//多......
  • docker-compose 快速运行java程序
    1、任意目录新建docker-compose.ymltouchdocker-compose.ymlmdkirconfigtouchconfig/application.yml2、复制jar文件到docker-compose.yml所在目录cp3、修改docker-compose.ymlversion:'3'services:qyweixin_server:image:image:harbor.iotwedora.com:4018......
  • Spring提供的实用纯Java工具类合集
    在SpringFramework里的spring-core核心包里面,有个org.springframework.util里面有不少非常实用的工具类。该工具包里面的工具类虽然是被定义在Spring下面的,但是由于Spring框架目前几乎成了JavaEE实际的标准了,因此我们直接使用也是无妨的,很多时候能够大大的提高我们的生产力。I......
  • JavaScript基础语句和window对象
    ifelse语句varsum=190varyouhuisum//赋予一个容器if(sum>=200){youhuisum=sum-10console.log(111)}else{//如果上面if不满足则都执行else语句......
  • Java基本结构
    Java基本结构1.顺序结构​ Java的基本结构就是顺序结构,除非特别指明,否则代码就是一行一行执行。2.选择结构if选择结构switch选择结构packagecom.wenxuan.structure;publicclassD1Switch{publicstaticvoidmain(String[]args){//case穿透,如果没有......
  • Java并发(二十一)----wait notify介绍
    1、小故事-为什么需要wait由于条件不满足(没烟干不了活啊,等小M把烟送过来),小南不能继续进行计算但小南如果一直占用着锁,其它人就得一直阻塞,效率太低于是老王单开了一间休息室(调用wait方法),让小南到休息室(WaitSet)等着去了,但这时锁释放开,其它人可以由老王随机安排进屋......
  • JavaScript读写FM1208 CPU卡源码
    本示例使用的发卡器:<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv=&quo......
  • JavaScript读写15693 ICod2 卡源码
    本示例使用设备:<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv="......
  • Java基础知识总结
    ​ Java是一门面向对象的编程语言,由SunMicrosystems公司于1995年推出。Java语言具有以下特点:面向对象:Java语言采用面向对象的编程思想,使用类和对象来描述软件。跨平台:Java语言的程序可以运行在任何支持Java虚拟机(JVM)的平台上。安全性:Java语言具有内置的安......
  • Java代码解析:初学者的编程入门指南
    ......