JAVA中反射机制二
声明:如需转载请说明地址来源:http://www.cnblogs.com/pony1223
反射二 利用反射创建对象
1.利用反射创建对象,首先我们创建一个类,类里面,我们知道构造函数有默认的构造函数,带参数的构造函数,私有的构造函数,如下,创建一个Person类:
package study.reflect; import java.util.List; public class Person { /** * 为了测试用 */ public String name = "test"; public Person() { } public Person(String name) { System.out.println("name:"+name); } public Person(String name,int age) { System.out.println("name:"+name+",age:"+age); } private Person(List list) { System.out.println("list"); } }
2.利用反射创建出我们的Person类的实例,为了测试,因此上面在Person中有一个属性为public String name = "test"; 如果创建不出对象,那么会出现空指针现象。
代码如下:
package study.reflect; import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.List; import org.junit.Test; /* * 利用反射解析出构造函数,使用构造函数创建对象 */ public class Demo02 { @Test public void test01() throws Exception { Class<?> clazz = Class.forName("study.reflect.Person"); Constructor constructor = clazz.getConstructor(null); Person person = (Person) constructor.newInstance(null); System.out.println(person.name); } @Test public void test02() throws Exception { Class<?> clazz = Class.forName("study.reflect.Person"); Constructor constructor = clazz.getConstructor(String.class); Person person = (Person) constructor.newInstance("hello"); System.out.println(person.name); } @Test public void test03() throws Exception { Class<?> clazz = Class.forName("study.reflect.Person"); Constructor constructor = clazz.getConstructor(String.class,int.class); Person person = (Person) constructor.newInstance("hello",123); System.out.println(person.name); } @Test public void test04() throws Exception { Class<?> clazz = Class.forName("study.reflect.Person"); Constructor constructor = clazz.getDeclaredConstructor(List.class); constructor.setAccessible(true); Person person = (Person) constructor.newInstance(new ArrayList()); System.out.println(person.name); } }
3.若想通过类的不带参数的构造方法来生成对象,我们有两种方式:
(1)通过上面说的构造函数的方式反射出对象;(2)1.先获得Class对象,然后通过该Class对象的newInstance()方法直接生成即可:
Class<?> classType = String.class;
Object obj = classType.newInstance();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端