文档章节

反射--(代码实现)

Jusenr
 Jusenr
发布于 2016/05/17 00:22
字数 498
阅读 4
收藏 0
点赞 2
评论 0

 

  创建Student类

 1 public class Student {
 2 
 3     private String name ;
 4     
 5     private int age ;
 6 
 7     @Override
 8     public String toString() {
 9         return "Student [name=" + name + ", age=" + age + "]";
10     }
11 }

 

  创建StudentDemo类

 1 public class StudentDemo {
 2     
 3     public static void main(String[] args) throws Exception {
 4         
 5         // 创建Student对象
 6         Student s = new Student() ;
 7         
 8         // 给s这个对象的name属性赋值为"张三"
 9         PropertiesTools.setProperty(s, "name", "张三") ;
10         
11         // 给s这个对象的age属性赋值为23
12         PropertiesTools.setProperty(s, "age", 23) ;
13         
14         // 输出
15         System.out.println(s);
16         
17     }
18 }

 

  创建ReflectTest类

 1 import java.lang.reflect.Method;
 2 import java.util.ArrayList;
 3 
 4 public class ReflectTest {
 5     
 6     public static void main(String[] args) throws Exception {
 7         
 8         /**
 9          * 我给你ArrayList<Integer>的一个对象,我想在这个集合中添加一个字符串数据,如何实现呢?
10          */
11         // 创建一个ArrayList集合
12         ArrayList<Integer> al = new ArrayList<Integer>() ;
13         
14         /**
15          * 当我们添加了泛型以后,就规定了该集合只能存储Integer类型的数据,而泛型这种机制只是在编译器有效,到了
16          * 运行期,这个泛型就不存在了,而这个动作叫做泛型擦除.由此可见在编译期好像完成不了,但是我们可以在运行期
17          * 对其进行操作,要在运行期完成,就需要使用反射
18          */
19         
20         // 添加
21         al.add(23) ;
22         
23         // 获取字节码文件对象
24         Class clazz = al.getClass() ;
25         
26         // 获取add方法
27         Method method = clazz.getDeclaredMethod("add", Object.class) ;
28         
29         // 调用方法
30         method.invoke(al, "你好") ;
31         
32         // 输出
33         System.out.println(al);
34     }
35 
36 }

 

  创建PropertiesTools类

 1 import java.lang.reflect.Field;
 2 
 3 public class PropertiesTools {
 4     
 5     /**
 6      * 作用: 是给obj这个对象的propertyName这个属性设置上value这个值
 7      * @param obj
 8      * @param propertyName
 9      * @param value
10      * @throws Exception 
11      */
12     public static void setProperty(Object obj , String propertyName , Object value) throws Exception{
13         
14         // 获取obj这个对象对应的字节码文件对象
15         Class clazz = obj.getClass() ;
16         
17         // 获取propertyName这个属性
18         Field field = clazz.getDeclaredField(propertyName) ;
19         
20         // 取消语法检查
21         field.setAccessible(true) ;
22         
23         // 调用方法赋值
24         field.set(obj, value) ;
25     }
26 }

 

© 著作权归作者所有

共有 人打赏支持
Jusenr
粉丝 0
博文 20
码字总数 10876
作品 0
西安
Android工程师
JavaSE_8系列博客——专家之路(一)---Java反射的总结

先来四个基本问题: 一、什么是反射(what)? 生活中的反射 百科定义:反射(外文名reflection),指的是声波、光波或其他电磁波遇到别的媒质分界面而部分仍在原物质中传播的现象。如光的反射...

u011500356 ⋅ 2017/10/22 ⋅ 0

工作中常用到的Java反射

这次提到的Java反射涉及的代码比较多。因为工作中经常用到反射,对代码做了很多抽象以及过滤器。虽然代码量很多,但是简单易用,过滤插件也易修改。 下面介绍下工作中哪些地方比较容易用到反...

李岩飞 ⋅ 2016/11/03 ⋅ 7

反射之动态创建对象

前言 C#有关反射的话题已经是个老生常谈的话题,也许园友一看这标题都不屑去看了,但是既然拿出来讲必有讲之道理,当然,不喜勿喷,高手请绕道!直入话题。 讨论 定义一个Person类代码如下 ...

jeffcky ⋅ 2015/07/27 ⋅ 0

Java面试题精编版—反射

—动力节点java   面试题   什么是reflection?其他语言有这种特点吗?   答案:Java中的反射是一种强大的工具,它能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行...

忻峰作浪 ⋅ 2016/11/21 ⋅ 0

架构,改善程序复用性的设计~第五讲 复用离不开反射和IOC续(大白话IOC)

要研究的问题:IOC是什么?它解决了什么?我们的项目中为何要用IOC?反射对性能真的影响很大吗?不用反射,谁意见最大? 来吧,开始说问题 1,IOC是什么?不用说什么容器,框架,大白话其实I...

mcy247 ⋅ 2017/12/04 ⋅ 0

java反射基本理论和实例

一、先看一下反射的概念: 主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。 反射是java中一种强...

文文1 ⋅ 2016/02/16 ⋅ 0

知识总结之 插件化基础 java反射与代理

Java平台的反射机制是代码动态加载和调用的基本途径,在安卓系统源码中也用到了大量的反射动态加载类。反射也是安卓平台插件化实现的必要掌握的基础知识。代理是客户端灵活操作对象,间接的低...

CankingApp ⋅ 2017/05/10 ⋅ 0

偷Microsoft师学MFC艺:且看C++如何支持反射

如果你问一个IT人士“C++如何实现类似Java的反射?”,结果会怎样呢?~!@#¥%……&,估计大部分人都会要稍微思考了一下,或者直接说“C++根本就不支持反射的呀!”。 是的,C++语言本身是不...

雅各宾 ⋅ 2015/04/17 ⋅ 0

Shadowsocks Android 源码解读之 Java 反射

在解读 时看到有在构造方法中使用到了 ,这是典型的 Java 反射。代码如下

骑摩托马斯 ⋅ 2017/03/28 ⋅ 0

Effective Java——通用程序设计(二)(2015-10-28 22:46:54)

52:通过接口引用对象一般来讲,应该优先使用接口而不是类来引用对象。如果有合适的接口,那么对于参数、返回值、变量和域来说,都应该使用接口类型进行声明。比如Vector是List接口的一个实现...

Dreyer ⋅ 2015/10/28 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

RabbitMQ学习以及与Spring的集成(三)

本文介绍RabbitMQ与Spring的简单集成以及消息的发送和接收。 在RabbitMQ的Spring配置文件中,首先需要增加命名空间。 xmlns:rabbit="http://www.springframework.org/schema/rabbit" 其次是模...

onedotdot ⋅ 14分钟前 ⋅ 0

JAVA实现仿微信红包分配规则

最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教。 算法介绍 一、红包金额限制 对于微...

楠木楠 ⋅ 26分钟前 ⋅ 0

Python 数电表格格式化 xlutils xlwt xlrd的使用

需要安装 xlutils xlwt xlrd 格式化前 格式化后 代码 先copy读取的表格,然后按照一定的规则修改,将昵称中的学号提取出来替换昵称即可 from xlrd import open_workbookfrom xlutils.copy ...

阿豪boy ⋅ 55分钟前 ⋅ 0

面试题:使用rand5()生成rand7()

前言 读研究生这3 年,思维与本科相比变化挺大的,这几年除了看论文、设计方案,更重要的是学会注重先思考、再实现,感觉更加成熟吧,不再像个小P孩,人年轻时总会心高气傲。有1 道面试题:给...

初雪之音 ⋅ 56分钟前 ⋅ 0

Docker Toolbox Looks like something went wrong

Docker Toolbox 重新安装后提示错误:Looks like something went wrong in step ´Checking if machine default exists´ 控制面板-->程序与应用-->启用或关闭windows功能:找到Hyper-V,如果处......

随你疯 ⋅ 今天 ⋅ 0

Guacamole 远程桌面

本文将Apache的guacamole服务的部署和应用,http://guacamole.apache.org/doc/gug/ 该链接下有全部相关知识的英文文档,如果水平ok,可以去这里仔细查看。 一、简介 Apache Guacamole 是无客...

千里明月 ⋅ 今天 ⋅ 0

nagios 安装

Nagios简介:监控网络并排除网络故障的工具:nagios,Ntop,OpenVAS,OCS,OSSIM等开源监控工具。 可以实现对网络上的服务器进行全面的监控,包括服务(apache、mysql、ntp、ftp、disk、qmail和h...

寰宇01 ⋅ 今天 ⋅ 0

AngularDart注意事项

默认情况下创建Dart项目应出现以下列表: 有时会因为不知明的原因导致列表项缺失: 此时可以通过以下步骤解决: 1.创建项目涉及到的包:stagehand 2.执行pub global activate stagehand或pub...

scooplol ⋅ 今天 ⋅ 0

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部