反射八:动态创建对象(Java)

1、获得Class对象
2、构造一个对象
3、通过构造器创建对象
4、通过反射调用普通方法
5、通过反射调用方法
6、通过方式操作属性

这里的User为反射一中的User

代码示例:

package reflect;import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;//动态的创建对象,通过反射
public class Test09 {public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {//获得Class对象Class c1 = Class.forName("reflect.User");//构造一个对象User user =(User)c1.newInstance();//本质是调用了类的无参构造器System.out.println(user);//User{name='null', id=0, age=0}System.out.println("================================");//通过构造器创建对象Constructor constructor = c1.getDeclaredConstructor(String.class, int.class, int.class);User user2 =(User)constructor.newInstance("花花", 007, 19);System.out.println(user2); //User{name='花花', id=7, age=19}//将User删除,也可以构建System.out.println("================================");//通过反射调用普通方法User user3 =(User)c1.newInstance();//通过反射调用方法//invoke激活 执行的意思//(对象,“方法的值”)Method setName = c1.getDeclaredMethod("setName", String.class);setName.invoke(user3,"花花");System.out.println(user3.getName());//通过方式操作属性System.out.println("================================");User user4 =(User)c1.newInstance();Field name = c1.getDeclaredField("name");//不能直接操作私有属性,需要关闭程序的安全检测,属性或方法的setAccessible(true)name.setAccessible(true);//关闭name.set(user4,"花花007");System.out.println(user4.getName());}
}

如何一个动态创建对象?相关推荐

  1. 用模板实现单例模式(线程安全)、模板方式实现动态创建对象

    一.用模板实现单例模式 在前面的文章中,用过多种方法实现单例模式,现在用模板方式来实现: 为了实现线程安全,需要在linux 下使用pthread_mutex_t 加锁,请使用g++ 编译并需要链接 ...

  2. 反射学习笔记之动态创建对象和调用方法

    动态加载和静态引用的程序集并不是同一个Assembly了.事实上,在.Net中,同一个应用程序域并不允许同时加载两个相同的Assembly.即使加载了,也会认为是两个不同的程序集.如果要同时加载两个, ...

  3. swift如何动态创建对象

    前言: 在一些大型的项目中常常在加载页面的时候根据服务器请求下来的数据动态创建视图控制器对象,最近的一个项目就有这一方面的需求,加载页面之前需要先请求服务器的数据得到一个JSON字典,根据里面字符串的 ...

  4. 反射动态创建对象_Json为例

    1. 取得数据类型Type 方式一:Type.GetType("类型全名"); 适合于类型的名称已知 方式二:obj.GetType(); 适合于类型名未知,类型未知,存在已有对象 ...

  5. 利用Qt元对象技术防止工厂模式下代码臃肿问题,QT 动态创建对象(第2种方法)

    问题的提出: 近来要编写一个仿真液压.电力.机械的软件,如下为液压的: 可以看到液压图中很多液压元器件,这些元器件的id.名称等都是从json配置文件读取的,配置文件格式如下: {"Clas ...

  6. protobuf在java应用中通过反射动态创建对象

    2019独角兽企业重金招聘Python工程师标准>>> ---恢复内容开始--- 最近编写一个游戏用到protobuf数据格式进行前后台传输,苦于protobuf接受客户端的数据时是 ...

  7. C# 利用反射动态创建对象[摘录]

    摘自:http://hi.baidu.com/yangyuhang/blog/item/f12ea90e13f214e336d12250.html 在VS.Net中,有很多种方法动态调用对象的构造函数 ...

  8. protobuf java 自动反射_protobuf在java应用中通过反射动态创建对象

    最近编写一个游戏用到protobuf数据格式进行前后台传输,苦于protobuf接受客户端的数据时是需要数据类型的如xxx.parseForm(-),这样就要求服务器在接受客户端请求时必须知道客户端传 ...

  9. Qt Qml动态创建对象/组件的两种方式

    Qml动态创建对象有两种方式: a.使用Loader b.使用javaScript 1.Loader加载机制: 加载过程: 通过source,来加载qml文件. 通过sourceComponent,来 ...

最新文章

  1. 最长公共子序列(LCS)问题 Longest Common Subsequence 与最长公告字串 longest common substr...
  2. R语言构建xgboost模型:基于稀疏数据(dgCMatrix which is a sparse matrix)、稠密数据(dense matrix)、xgb.DMatrix数据聚合
  3. 相机上的AE AF AWB AEB都表示的是什么?
  4. 航空频率表 2020_航空波段+调频、中波、短波,这个美国TR608收音机值40美元吗?...
  5. php drive mssql,PHP 连接 MSSQL 2005/2008 以UTF8存取 并让ADODB支持的安装设置
  6. python十进制小数转二进制_python十进制和二进制的转换方法(含浮点数)
  7. UnderScore的使用实例记录
  8. 全国计算机等级考试题库二级C操作题100套(第23套)
  9. java ee用户登录_EE Servlet 3:使用会话和过滤器开发用户登录
  10. [leetcode-108,109] 将有序数组转换为二叉搜索树
  11. InputStream中通过mark和reset方法重复利用缓存
  12. linux文件内上下移动,Linux中有多个查看文件的命令,如果希望在查看文件内容过程中用光标可以上下移动来查看文件内容,则符合要求的那一个命令是( )。...
  13. 李飞飞等6名华人入选ACM 2018 Fellow,无国内学者入选
  14. [Java]Socket和ServerSocket学习笔记
  15. MySQL导入与导出备份详解
  16. java 数学公式解析_JAVA 文本表达式解析成数学公式,计算出结果
  17. SCI/SSCI选刊神器之——Elsevier Journal Finder
  18. 华为薪资等级结构表_华为内部考核体系
  19. mos管的rc吸收电路计算_RC吸收计算应用.doc
  20. BIM技术都是如何应用于水利工程中

热门文章

  1. BZOJ 3555 [CTSC2014] 企鹅QQ Hash
  2. 信息系统项目管理师(高级)考试大纲
  3. DICOM查询/获取信息模型的研究及关系数据库实现
  4. 一键安装nginx(auto_nginx_install.sh
  5. 使用Zabbix监控memcached
  6. CentOS新增硬盘系统不能自动进行识别。
  7. Mysql各个版本之间的比较
  8. 日语学习  「そっと」 和 「こっそり」 的区別
  9. java listen_java web-- listen
  10. 设置hash后导致的返回问题的解决方案