4、获取Class中的构造函数
4、获取Class中的构造函数
4.1 早期创建对象
- 早期创建对象,先根据被new的类的名称找寻该类的字节码文件,并加载进内存,并创建该字节码文件对象,并接着创建该接文件的对应的Person对象
com.hw.bean.Person p = new com.hw.bean.Person();
4.2 现在创建对象
- 找寻该名称类文件,并加载进内存,调用newInstance() 创建由此 类对象表示的类的新实例。
@Test
public void createNewObject_1() throws Exception {
// 早期创建对象,先根据被new的类的名称找寻该类的字节码文件,并加载进内存,
// 并创建该字节码文件对象,并接着创建该接文件的对应的Person对象
com.hw.bean.Person p = new com.hw.bean.Person();
// 现在
String name = "com.hw.bean.Person";
// 找寻该名称类文件,并加载进内存,并产生Class对象
Class clazz = Class.forName(name);
// 通过空参构造器获取实例
Object obj = clazz.newInstance();
}

- 当获取指定名称对应类中的所体现的对象时,而该对象初始化不是用空参数构造该怎么办呢?
- 既然是通过指定的构造函数,进行对象的初始化,所以应该先获取到构造函数。
4.3 获取Class中的构造函数
4.3.1 getConstructor(类<?>... parameterTypes)
- 返回一个 Constructor对象,该对象反映 Constructor对象表示的类的指定的公共 类函数。
- parameterTypes参数是以声明顺序标识构造函数的形式参数类型的类对象的数组。
- 如果此类对象表示在非静态上下文中声明的内部类,则形式参数类型将显式包围实例作为第一个参数。
- 反映的构造是这样表示的类的公共构造类对象,其形式参数类型匹配那些由指定的parameterTypes 。
@Test
public void createNewObject_2() throws Exception {
String name = "com.hw.bean.Person";
Class clazz = Class.forName(name);
// 获取指定方法参数的构造对象
Constructor constructor = clazz.getConstructor(String.class, int.class);
System.out.println(constructor);
// 通过该构造器对象的newInstance()方法进行对象的初始化
Object obj = constructor.newInstance("小明", 22);
}
运行

本章节源码: ReflectDemo2
4、获取Class中的构造函数的更多相关文章
- Java反射机制(获取Class对象的三种方式+获取Class中的构造函数进行对象的初始化+获取反射类的字段+获取反射类的一般方法)
反射技术其实就是动态加载一个指定的类,并获取该类中的所有内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员,简单来说:反射技术可以对一个类进行解剖,反射大大增强 ...
- Java反射机制demo(三)—获取类中的构造函数
Java反射机制demo(三)—获取类中的构造函数 1,获取类中所有的构造函数 如下面的代码中所示,这个类中显式的构造函数有五个. 空构造: public UserInfo() 带参构造有四个: pu ...
- freemarker获取封装类中对象的属性
freemarker获取封装类中对象的属性 1.设计思路 (1)封装学生类 (2)创建数据模型 (3)新建student.ftl (4)运行Junit测试文件,生成HTML文件 2.封装学生类 Stu ...
- freemarker获取封装类中对象的属性(六)
freemarker获取封装类中对象的属性 1.设计思路 (1)封装学生类 (2)创建数据模型 (3)新建student.ftl (4)运行Junit测试文件,生成HTML文件 2.封装学生类 Stu ...
- 详解C#泛型(二) 获取C#中方法的执行时间及其代码注入 详解C#泛型(一) 详解C#委托和事件(二) 详解C#特性和反射(四) 记一次.net core调用SOAP接口遇到的问题 C# WebRequest.Create 锚点“#”字符问题 根据内容来产生一个二维码
详解C#泛型(二) 一.自定义泛型方法(Generic Method),将类型参数用作参数列表或返回值的类型: void MyFunc<T>() //声明具有一个类型参数的泛型方法 { ...
- UDF-java获取名字中的姓
1.使用方法 在hive中加载jar包,调用udf函数 #从名字中获取姓 add jar ${scriptDir}/GetLastNameUDF.jar; create temporary funct ...
- Spring Spring boot 获取IOC中的bean,ApplicationContext
https://blog.csdn.net/weixin_38361347/article/details/89304414 https://www.jianshu.com/p/9ea13b00b1d ...
- 《挑战30天C++入门极限》C++中利用构造函数与无名对象简化运算符重载函数
C++中利用构造函数与无名对象简化运算符重载函数 在完整描述思想之前,我们先看一下如下的例子,这个例子中的加运算符重载是以非成员函数的方式出现的: //程序作者:管宁 //站点:www.cn ...
- 如何获取url中的参数并传递给iframe中的报表
在使用报表软件时,用户系统左边一般有目录树,点击报表节点就会在右侧网页的iframe中显示出报表,同时点击的时候也会传递一些参数给网页,比如时间和用户信息等.如何使网页中的报表能够获取到传递过来的参数 ...
随机推荐
- 什么是HybridDB for MySQL (原PetaData)
云数据库HybridDB for MySQL (原名PetaData)是同时支持海量数据在线事务(OLTP)和在线分析(OLAP)的HTAP(Hybrid Transaction/Analytical ...
- JVM -- 虚拟机中的对象
一.HotSpot虚拟机 它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机.我们大致知道虚拟机内存的概况,也许更想了解这些虚拟机内存的数据的其他细节,誓如它们是如 ...
- java中整数的默认为int类型的一些问题
thingking in java 读书感悟 作者 :淮左白衣 写于2018年4月8日17:51:44 关于整数的默认类型,以及会产生的一些小问题 涉及基本数据类型的重载 关于整数的默认类型,以及会产 ...
- Error: errCode: -404011 cloud function execution error | errMsg: clou……错误
在开通了云开发之后,无论点击小程序获取openid按钮报,Error: errCode: -404011 cloud function execution error | errMsg: clou…… ...
- Git 版本恢复命令reset
reset命令有3中方式: git reset -mixed: 此为默认方式,不带任何参数的git reset, 使用这种方式,项目会回退到某个版本,只保留源码,回退commit和index的信息. ...
- sql 计算奇数还是偶数
& 运算符来判断奇数还是偶数 sql判断奇数还是偶数 3&1 返回 1 2&1 返回0 0&1 返回 0
- ORA-16401: archivelog rejected by RFS
ORA-16401: archivelog rejected by RFS 无线出单系统邮件告警10.111.20.1 1. 报错 SYS > ! oerr ora 16041 1604 ...
- 奇妙的算法【7】-贪婪算法-dp
问题1描述:[贪婪算法,Dijistra算法] ①有一只兔子要从一个N*N的二维矩阵方格中从上跳到下面: ②每次只能向左或向下,越过一个方格,跳到下一个方格中: ③被越过的方格中的数值,表示该兔子越过 ...
- vue 集成 vis-network 实现网络拓扑图
vis.js 网站 https://visjs.org/ vs code 下安装命令 npm install vis-network 在vue 下引入 vis-network组件 const v ...
- ASP.NET WEB应用程序(.network4.5)MVC Razor视图引擎2 Areas区域说明
https://www.cnblogs.com/webapi/p/5976642.html Asp.Net MVC Areas区域说明 一般网站分为前台+会员后台+管理员后台,做过webform的 ...