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();
JAVA中反射机制二的更多相关文章
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
一.Java的反射机制 每个Java程序执行前都必须经过编译.加载.连接.和初始化这几个阶段,后三个阶段如下图: 其中
- JAVA中反射机制一
反射一 基本概念 一.反射机制的基本概念 什么是反射?反射是指在运行状态中,对于任意一个类,都可以获取到这个类的所有属性和方法:对于任意一个对象,都能够调用这个对象的任意方法和属性:这种动态获取信息及 ...
- Java中反射机制详解
序言 在学习java基础时,由于学的不扎实,讲的实用性不强,就觉得没用,很多重要的知识就那样一笔带过了,像这个马上要讲的反射机制一样,当时学的时候就忽略了,到后来学习的知识中,很多东西动不动就用反射, ...
- JAVA中反射机制五(java.lang.reflect包)
一.简介 java.lang.reflect包提供了用于获取类和对象的反射信息的类和接口.反射API允许对程序访问有关加载类的字段,方法和构造函数的信息进行编程访问.它允许在安全限制内使用反射的字段, ...
- JAVA中反射机制六(java.lang.reflect包)
一.简介 java.lang.reflect包提供了用于获取类和对象的反射信息的类和接口.反射API允许对程序访问有关加载类的字段,方法和构造函数的信息进行编程访问.它允许在安全限制内使用反射的字段, ...
- JAVA中反射机制四
声明:如需转载请说明地址来源:http://www.cnblogs.com/pony1223 反射四 利用反射获取类的属性 1.通过反射也可以获取到类中的属性,假设我们继续使用Person这个类,然后 ...
- JAVA中反射机制三
声明:如需转载请说明地址来源:http://www.cnblogs.com/pony1223 反射三 利用反射获取对象的方法,并调用方法 1.利用反射获取对象的方法,我们仍然利用上面的Person类, ...
- JAVA中反射机制五(JavaBean的内省与BeanUtils库)
内省(Introspector) 是Java 语言对JavaBean类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法 ...
- java中反射机制通过字节码文件对象获取字段和函数的方法
pclass = Class.forName("get_class_method.Person"); //Field ageField = pclass.getField(&quo ...
随机推荐
- BETA事后总结
目录 所有成员 项目宣传视频链接 贡献比例 工作流程 组员分工 本组 Beta 冲刺站立会议博客链接汇总 燃尽图 原计划.达成情况及原因分析 组员:胡绪佩 组员:周政演 组员:庄卉 组员:何家伟 组员 ...
- HDU 5286 How far away ? lca
题目链接: 题目 How far away ? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- HDU 5203 Rikka with wood sticks 分类讨论
题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5203 bc(chinese):http://bestcoder.hdu.edu.cn/con ...
- 解决Ubuntu(Linux)平台下Sublime Text 3 安装中文输入支持库后 开启gnome-terminal报错的问题
在Ubuntu下安装Sublim Text3后发现无法输入中文,按照此链接的方法解决后.然后用下列代码配置C++的编译系统: { "cmd":["g++",&q ...
- nginx 配置文件简介
主配置文件说明(先将注释部分去掉:sed -ri ‘/^#|[[:space:]]+#/d’ /etc/nginx/nginx.conf) (1)全局配置段 1:指明运行worker进程的用户和组 u ...
- 78W的数据使用forall 进行批量转移;
create or replace procedure test_forall(CURRENTPAGE number ) as .--CURRENTPAGE number :=2 ; .PAGESIZ ...
- Fiddler绕过前端直接和后台进行交互
测试需求:有一个功能,允许用钻石兑换金币,假设1钻石=1金币,前端控制一次至少兑换10个,最多100个,后台不做验证. 测试方案:输入10,也就是告诉前端我要兑换10个金币,等前端验证通过之后,截取要 ...
- 【ASP.NET Core 】ASP.NET Core 源码学习之 Logging[1]:Introduction
在ASP.NET 4.X中,我们通常使用 log4net, NLog 等来记录日志,但是当我们引用的一些第三方类库使用不同的日志框架时,就比较混乱了.而在 ASP.Net Core 中内置了日志系统, ...
- windows7下的64位redis安装简介
在网上找了好多,指向的都是同一个地址,可惜打不开.https://github.com/MSOpenTech/redis/releases.网址被禁掉了.终于找到一篇有用的帖子,安装成功.感谢仁兄ko ...
- PD模型创建完获取生成表脚本
1.双击表名,弹出属性对话框-->General----> Owner 表名前缀,如XX.SYS_TABLE 最好去掉 2.Preview 复制里面的脚本到数据库执行下即可