- 浏览: 215613 次
- 性别:
- 来自: 深圳
-
文章分类
最新评论
-
jongde1:
Axure太难学了,分享mockplus工具,有兴趣可以去了解 ...
Axure RP 原型设计工具 -
di1984HIT:
这里面提到了好几种解决办法。
Spring AOP对日志记录、Exception日志记录 -
di1984HIT:
学习一下。
spring struts2 零配置 -
di1984HIT:
不错,不错啊
Struts2防止表单重复提交 -
di1984HIT:
kettle怎么样啊。
Kettle初探
在工作中使用JAVA反射的经验总结,也可以说是一些小技巧,以后学会新的小技巧,会不断更新。
在开始之前,我先定义一个测试类Student,代码如下:
package chb.test.reflect; public class Student { private int age; private String name; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public static void hi(int age,String name){ System.out.println("大家好,我叫"+name+",今年"+age+"岁"); } }
一、JAVA反射的常规使用步骤
反射调用一般分为3个步骤:
-
得到要调用类的class
-
得到要调用的类中的方法(Method)
-
方法调用(invoke)
代码示例:
Class cls = Class.forName("chb.test.reflect.Student"); Method m = cls.getDeclaredMethod("hi",new Class[]{int.class,String.class}); m.invoke(cls.newInstance(),20,"chb");
二、方法调用中的参数类型
在方法调用中,参数类型必须正确,这里需要注意的是不能使用包装类替换基本类型,比如不能使用Integer.class代替int.class。
如我要调用Student的setAge方法,下面的调用是正确的:
Class cls = Class.forName("chb.test.reflect.Student"); Method setMethod = cls.getDeclaredMethod("setAge",int.class); setMethod.invoke(cls.newInstance(), 15);
而如果我们用Integer.class替代int.class就会出错,如:
Class cls = Class.forName("chb.test.reflect.Student"); Method setMethod = cls.getDeclaredMethod("setAge",Integer.class); setMethod.invoke(cls.newInstance(), 15);
jvm会报出如下异常:
java.lang.NoSuchMethodException: chb.test.reflect.Student.setAge(java.lang.Integer) at java.lang.Class.getDeclaredMethod(Unknown Source) at chb.test.reflect.TestClass.testReflect(TestClass.java:23)
三、static方法的反射调用
static方法调用时,不必得到对象示例,如下:
Class cls = Class.forName("chb.test.reflect.Student"); Method staticMethod = cls.getDeclaredMethod("hi",int.class,String.class); staticMethod.invoke(cls,20,"chb");//这里不需要newInstance //staticMethod.invoke(cls.newInstance(),20,"chb");
四、private的成员变量赋值
如果直接通过反射给类的private成员变量赋值,是不允许的,这时我们可以通过setAccessible方法解决。代码示例:
Class cls = Class.forName("chb.test.reflect.Student"); Object student = cls.newInstance();//得到一个实例 Field field = cls.getDeclaredField("age"); field.set(student, 10); System.out.println(field.get(student));
运行如上代码,系统会报出如下异常:
java.lang.IllegalAccessException: Class chb.test.reflect.TestClass can not access a member of class chb.test.reflect.Student with modifiers "private" at sun.reflect.Reflection.ensureMemberAccess(Unknown Source) at java.lang.reflect.Field.doSecurityCheck(Unknown Source) at java.lang.reflect.Field.getFieldAccessor(Unknown Source) at java.lang.reflect.Field.set(Unknown Source) at chb.test.reflect.TestClass.testReflect(TestClass.java:20)
解决方法:
Class cls = Class.forName("chb.test.reflect.Student"); Object student = cls.newInstance(); Field field = cls.getDeclaredField("age"); field.setAccessible(true);//设置允许访问 field.set(student, 10); System.out.println(field.get(student));
其实,在某些场合下(类中有get,set方法),可以先反射调用set方法,再反射调用get方法达到如上效果,代码示例:
Class cls = Class.forName("chb.test.reflect.Student"); Object student = cls.newInstance(); Method setMethod = cls.getDeclaredMethod("setAge",Integer.class); setMethod.invoke(student, 15);//调用set方法 Method getMethod = cls.getDeclaredMethod("getAge"); System.out.println(getMethod.invoke(student));//再调用get方法
发表评论
-
Linux下部署多个Tomcat多个域名
2015-12-12 19:02 3706一、安装JDK 1、安装jdk-7u79-linux-x64. ... -
linux下安装swftools和openOffice
2015-07-03 17:09 763最近公司实现一个仿豆丁网百度文库阅读器的功能,需要用到两个软件 ... -
redis Java develop
2014-10-23 18:01 6741. http://javacrazyer.iteye.com ... -
验证码 原理 破解
2014-08-20 17:52 651验证码 原理 破解 reference: http://bl ... -
HttpClient 学习经验
2014-08-14 11:01 697HttpClient学习经验 HttpCl ... -
P2P resources
2013-12-09 18:24 9981.P2P导航收录 http://www.p2peye.com ... -
运用加密技术保护Java源代码
2013-06-08 08:38 1138运用加密技术保护Java源代码 http://www.ibm ... -
log4j.properties配置详解
2013-03-15 17:00 0log4j.properties配置详解 Log4J的配置文 ... -
Struts 2 studing
2012-12-28 17:28 7491. Struts 2的基石——拦截器(Interceptor ... -
J2EE项目异常处理
2012-12-26 11:08 1137J2EE项目异常处理 为什 ... -
如何将基于 Struts、Spring 和 Hibernate 的应用从 Tomcat 迁移到 WebSphere Application Server
2012-12-21 10:28 1238引言 现在很多的企业都 ... -
详解spring事务属性
2012-12-20 10:22 858Spring声明式事务让我们从复杂的事务处理中得到解脱。使得我 ... -
Java List Copy,Remove容易出现的问题
2012-11-15 03:08 1059懒程序员,在代码越写越多的情况下,总想着使用把代码精简一 ... -
MySQL---ORACLE序列解决方案
2012-11-13 00:55 1214MySQL自增长与Oracle序列的区别: 自增长只能用于表 ... -
使用反射循环查找所有父类属性
2012-11-02 01:28 2149使用反射循环查找所有父类属性 ... -
list,set,map,数组间的相互转换
2012-11-02 01:25 971list,set,map,数 ... -
java bean自动进行rowMapper or handler的类
2012-10-20 03:14 1361一般情况下在进行jdbc编程的时候避免不了的要写n多的bean ... -
URL encoding 乱码处理
2012-10-10 15:53 908搞了两三天的乱码处理,试了很多方法,过滤器啊,编码转换啊,试来 ... -
JAVA 按任意角度旋转图片,并生成新的旋转后图片
2012-07-11 11:03 3711JAVA 按任意角度旋转图片,并生成新的旋转 ... -
QR Code
2012-06-12 12:29 01. 在线生成QR Code 网站 http://www. ...
相关推荐
压缩包中的`prototype.js开发手记.doc`和`prototype.js开发者手册1.4.doc`文件,虽然不是直接关于Java,但Prototype.js是一个流行的JavaScript库,它扩展了JavaScript的基本对象,使得在JavaScript中进行面向对象...
- **线程安全策略**:对于有状态的单例Bean,可以使用ThreadLocal等手段保证线程安全。 7. **Maven命令**: - **package**:打包项目,将结果放入target目录下。 - **install**:不仅打包,还将结果安装到本地...
scratch少儿编程逻辑思维游戏源码-战舰 v2.0.zip
(E卷,100分)- 最大矩阵和(Java & JS & Python & C).html
WebSocket是一种在客户端和服务器之间建立持久连接的协议,它允许双方进行双向通信,极大地提高了实时性,被广泛应用于即时通讯、在线游戏、股票交易等领域。本篇将详细讲解如何使用C#来实现WebSocket,以及Fleck库在其中的作用。 WebSocket协议基于HTTP的握手过程,但一旦连接建立,它就不再依赖HTTP,而是通过TCP直接通信。在C#中,我们可以利用.NET Framework或.NET Core提供的System.Net.WebSockets命名空间来创建WebSocket服务器和客户端。然而,对于更高级的功能和更好的灵活性,开发者通常会选择第三方库,如Fleck。 Fleck是C#中一个轻量级且高效的WebSocket服务器实现。它提供了丰富的事件驱动API,使得开发者可以轻松地处理WebSocket连接的建立、消息传递和断开等操作。下面我们将探讨Fleck的使用步骤: 1. **安装Fleck**:你需要在你的项目中添加Fleck库。如果你使用的是NuGet包管理器,可以通过搜索"Fleck"并安装来获取。 2. **初始化服务器**:在C#代码中,首先创建一个Fleck服务器实例,指定监听的IP地址和端口号。例如: ```csharp var server = new Fleck.WebSocketServer("ws://localhost:8080"); ``` 3. **配置服务器**:你可以设置各种配置选项,如最大接收/发送缓冲区大小、心跳间隔等。然后注册事件处理器,如OnOpen、OnClose、OnMessage等,以处理客户端连接、断开和消息接收。 4. **连接事件**:`OnOpen`事件在客户端连接时触发,你可以在这里对新连接进行初始化操作,如存储连接信息、验证用户等。 5. **消息处理**:`OnMessage`
实训商业源码-苍穹衔电街电共享充电宝挂机源码-毕业设计.zip
内容概要:本文详细介绍了基于Android Studio开发的日历备忘录记事本项目,涵盖日历查看、添加备忘录、闹钟提醒和删除备忘录等功能。项目使用SQLite数据库进行数据管理和持久化,利用AlarmManager实现闹钟提醒功能。文章深入讲解了各个功能模块的实现细节,如日历视图的使用、数据库操作类的设计、闹钟设置的逻辑以及界面交互的优化。此外,还探讨了一些常见的开发技巧和注意事项,如时间戳的存储、手势识别的应用等。 适用人群:适用于初学者和有一定经验的Android开发者,尤其是希望深入了解SQLite数据库操作和AlarmManager使用的开发者。 使用场景及目标:① 学习如何使用Android Studio构建完整的应用程序;② 掌握SQLite数据库的基本操作,包括建表、增删查改;③ 理解AlarmManager的工作机制及其在实际项目中的应用;④ 提升用户体验,如优化界面交互和提高代码质量。 其他说明:文中提供的源码和详细的代码注释有助于读者更好地理解和实践。同时,项目中预留了一些扩展任务,鼓励读者进一步探索和提升技能。
内容概要:本文详细介绍了如何使用TensorRT加速YOLOv5模型推理,并结合QT框架搭建一个多任务并行处理的智能监控平台。主要内容包括:YOLOv5与TensorRT的融合,通过将YOLOv5模型转换为ONNX格式并进一步转化为TensorRT引擎,从而大幅提升推理速度;QT框架的应用,利用其跨平台特性实现视频监控、录像回放、电子地图等多种功能;16路视频并行检测的具体实现,通过多线程机制和CUDA流的支持,确保系统的高效运行。此外,文章还探讨了模型热更新、网络流处理、日志记录等方面的优化措施。 适合人群:具备一定编程基础,尤其是熟悉C++、Python和深度学习框架的研究人员和技术开发人员。 使用场景及目标:适用于需要高效、智能监控解决方案的企业和个人开发者。主要目标是提高视频监控系统的效率和智能化水平,如安防监控、交通监测等领域。 其他说明:文中提供了大量代码示例,帮助读者更好地理解和应用所介绍的技术。同时强调了系统设计中的性能优化技巧,如内存管理和多线程调度等。
内容概要:本文详细介绍了基于S7-200 PLC和MCGS组态的运料小车控制系统的设计与实现。首先阐述了系统的IO分配,明确了输入输出信号的具体连接方式,如限位开关和电机控制信号。接着讲解了接线图原理图,包括电源连接、信号传输路径等。然后展示了梯形图程序的关键逻辑,如初始化、正反向运行控制等,并进行了详细的代码解析。最后介绍了MCGS组态画面的设计,通过图形化界面实现了对小车运行状态的实时监控和操作。 适用人群:适用于从事自动化控制领域的工程师和技术人员,尤其是对PLC编程和组态软件有一定了解的人群。 使用场景及目标:该系统主要用于工厂自动化生产线中物料运输的小车控制,旨在提高生产效率和安全性。通过合理的硬件配置和软件编程,实现小车的自动往返、限位保护等功能,确保系统稳定可靠运行。 其他说明:文中还分享了一些实际调试过程中遇到的问题及其解决方案,强调了硬件线路和软件逻辑相结合的重要性。此外,提出了一些改进措施,如增加历史轨迹记录、优化传感器信号处理等。 标签1:PLC编程,标签2:MCGS组态,标签3:自动化控制,标签4:S7-200,标签5:运料小车
实训商业源码-超漂亮的响应式个人主页-毕业设计.zip
scratch少儿编程逻辑思维游戏源码-准备做一个射箭游戏.zip
实训商业源码- 深蓝健身房瑜伽馆行业V4.14.0 小程序前端+后端-毕业设计.zip
实训商业源码-thinkphp小雨网址导航网整站源码-毕业设计.zip
实训商业源码- 超人配送代驾跑腿V1.5.11-毕业设计.zip
内容概要:本文详细介绍了用于大功率直流800V及以上电压输出的双闭环Vienna整流器及其SVPWM控制方法。首先阐述了三相三电平Vienna整流器的拓扑结构特点,强调其适用于高压环境的优势。接着深入探讨了电流内环和电压外环的设计,包括PI控制器参数的选择、中点电位平衡控制以及SVPWM的具体实现方式。文中提供了多个MATLAB/Simulink代码片段,展示了如何进行扇区判断、占空比计算等关键步骤,并分享了一些实用技巧,如避免使用atan2函数以提高仿真速度。此外,还讨论了动态响应测试、参数整定等方面的经验,确保系统的高效性和稳定性。最终给出了详细的仿真结果,验证了方案的有效性。 适合人群:从事电力电子、大功率直流电源设计的研究人员和技术工程师。 使用场景及目标:①理解和掌握双闭环Vienna整流器的工作原理;②学会利用MATLAB/Simulink搭建并优化SVPWM控制系统;③满足国家相关标准的要求,如THD低于5%,效率高于95%等。 其他说明:文章不仅提供了理论知识,还包括大量实践经验,帮助读者更好地应对实际工程中的挑战。同时提醒读者注意一些常见的陷阱,如IGBT选择不当导致的过压问题等。
scratch少儿编程逻辑思维游戏源码-陷阱游戏.zip
内容概要:本文详细介绍了基于S7-200 PLC和MCGS组态的机械手抓取控制系统。首先阐述了系统的核心组件,包括S7-200 PLC作为控制核心和MCGS组态软件作为可视化界面的作用。接着展示了具体的梯形图编程示例及其逻辑分析,解释了如何通过编程实现机械手的精确控制。然后讨论了IO分配与接线图原理,确保各个信号正确连接。最后介绍了MCGS组态画面的设计,使操作人员能够直观监控和控制机械手的工作状态。此外,文中还提供了许多实用的小技巧,如调试方法、常见错误规避等。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC编程和组态软件有一定了解的人群。 使用场景及目标:适用于需要设计和实施机械手抓取控制系统的工业环境,旨在提高生产效率和精度。目标是帮助读者掌握S7-200 PLC和MCGS组态的具体应用,从而构建稳定可靠的控制系统。 其他说明:文章不仅涵盖了理论知识,还包括大量实践经验,有助于读者更好地理解和应用相关技术。
scratch少儿编程逻辑思维游戏源码-像素柱.zip
实训商业源码- 朋友圈浏览记录V1.0.3 全开源版-毕业设计.zip
JavaScript语言教程&案例&相关项目资源,奖励仅限VIP资源