Java反射机制浅析图+应用实例

反射实例——JAVA反射机制 本文转载自:反射实例——JAVA反射机制 一、Java反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。其中LEAD/LEAD++ 、OpenC++ 、MetaXa和OpenJava等就是基于反射机制的... 阅读详情

转载自:http://blog.csdn.net/coder_pig/article/details/44784399


Java反射机制浅析图+应用实例

——转载请注明出处:coder-pig


本节引言:


其实很久之前就想归纳一下Java中的这个反射机制了,前些天看了慕课网一个讲反射机制的

视频教程觉得不错,又复习了一下,今天面试了一下午,回来就不想写代码了,就写写关于Java

反射的总结,写些简单的使用例子,最后找了2个Android中反射机制应用的例子,分别是

旧版本SDK利用AIDL + Java反射机制接听与挂断电话以及利用反射机制通过按钮关闭

对话框,后续如果用到会另外总结~




本节正文:

1.反射的相关概念图:




2.简单的使用示例:

我们写个简单的例子来理解Java反射机制的使用,其实就是通过Class类的相关方法实现而已!

我们先定义一个一个用来做演示的类:Test.java:

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. package com.jay.test;  
  2.   
  3. public class Test {  
  4.   
  5.     private String s1;  
  6.     public int i1;  
  7.     public static float PI = 3.14159f;  
  8.       
  9.       
  10.     public Test() {  
  11.         System.out.println("我是无参的构造方法");  
  12.     }  
  13.       
  14.       
  15.     public Test(String s1) {  
  16.         super();  
  17.         this.s1 = s1;  
  18.         System.out.println("我是有一个参数的构造方法");  
  19.     }  
  20.       
  21.       
  22.     public Test(String s1,int i1)  
  23.     {  
  24.         System.out.println("我是有两个参数的构造方法");  
  25.     }  
  26.       
  27.   
  28.     public void sum(int a,int b)  
  29.     {  
  30.         System.out.println("a+b = "+(a+b));  
  31.     }  
  32.       
  33. }  




①获取某个类的相关信息:

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. public static void getTheClass()  
  2. {  
  3.     Class class1 = Test.class;  
  4.     System.out.println(class1.getName());  
  5.     System.out.println(class1.getSimpleName());  
  6. }  

运行截图:



②获取构造方法:

获取构造方法就要通过Constructor这个API了:

提供四种可供调用的方法:

Constructor getConstructor(Class[] params) -- 获得使用特殊的参数类型的公共构造函数, 

Constructor[] getConstructors( ) -- 获得类的所有公共构造函数 

Constructor getDeclaredConstructor(Class[] params) -- 获得使用特定参数类型的构造函数(与接入级别无关) 

Constructor[] getDeclaredConstructors( ) -- 获得类的所有构造函数(与接入级别无关) 


代码示例:

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. public static void getConstructor()  
  2. {  
  3.     Class class1 = Test.class;  
  4.     Constructor[] cs = class1.getDeclaredConstructors();  
  5.     for(Constructor constructor:cs)  
  6.     {  
  7.         System.out.print(constructor.getName() + "(");  
  8.         //获取构造函数的参数列表的对应数据类型:  
  9.         Class[] ParamTypes = constructor.getParameterTypes();  
  10.         for(Class class2:ParamTypes)  
  11.         {  
  12.             System.out.print(class2.getSimpleName() + ",");  
  13.         }  
  14.         System.out.println(")");  
  15.     }  
  16. }  

运行截图:





③获取成员变量:

获取相关的成员变量则要用到Field这个API了:

也是提供了四种可供调用的方法:

Field getField(String name) -- 获得命名的公共字段 

Field[] getFields( ) -- 获得类的所有公共字段 

Field getDeclaredField(String name) -- 获得类声明的命名的字段 

Field[] getDeclaredFields( ) -- 获得类声明的所有字段 


代码示例:

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. public static void getField()  
  2. {  
  3.     Class class1 = Test.class;  
  4.     Field[] fields = class1.getFields();  
  5.     for(Field field:fields)  
  6.     {  
  7.         //得到成员变量的数据类型  
  8.         Class fieldType = field.getType();  
  9.         String TypeName = fieldType.getName();  
  10.         //获得成员变量的参数名称  
  11.         String filedName = field.getName();  
  12.         System.out.println(TypeName+" "+filedName);  
  13.     }  
  14. }  


运行截图:








④获得相关方法:

获取类中的相关方法就需要用到Method这个API了:

同样也是提供了四个可供调用的方法:

Method getMethod(String name, Class[] params) -- 使用特定的参数类型,获得命名的公共方法 

Method[] getMethods( ) -- 获得类的所有公共方法 

Method getDeclaredMethod(String name, Class[] params) -- 使用特写的参数类型,获得类声明的命名的方法 

Method[] getDeclaredMethods( ) -- 获得类声明的所有方法,不考略权限 



代码示例:

①获得类中所有的公共方法:

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. public static void getMethod()  
  2. {  
  3.     Class class1 = Test.class;  
  4.     Method[] methods = class1.getMethods();  
  5.     for(int i = 0;i < methods.length;i++)  
  6.     {  
  7.         //获取方法返回值  
  8.         Class returnType = methods[i].getReturnType();  
  9.         System.out.print(returnType.getName() + " ");  
  10.         //获得方法名称  
  11.         System.out.print(methods[i].getName() + "(");  
  12.         //获取参数列表  
  13.         Class[] paramTypes = methods[i].getParameterTypes();  
  14.         for(Class class2:paramTypes)  
  15.         {  
  16.             System.out.print(class2.getName() + ",");  
  17.         }  
  18.         System.out.println(")");  
  19.     }  
  20. }  

运行截图:


除了我们自定义的方法外,我们还看到了一些其他的方法,他们是父类提供的一些方法~


②利用反射调用相关方法:

代码示例:

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. public static void useMethod()throws Exception  
  2. {  
  3.     Test test = new Test();  
  4.     Class class1 = test.getClass();  
  5.     Method method = class1.getMethod("sum"int.class,int.class);  
  6.     Object object = method.invoke(test, new Object[]{11,22});  
  7. }     

运行截图:


当然调用该方法的时候别忘了捕获异常哦!






3.Android中使用反射实例:

关于在Android中的反射机制的一些实例,比如:Android 在1.1版本后就把接听与挂断的API给隐藏

了,我们就可以通过AIDL + 反射机制来调用ITelephony中的相关方法,鉴于篇幅,时间关系这里就

不详细演示讲解,关于Android中反射机制的例子可参考下述资料:

①Android接听与挂断电话的实现:

http://blog.sina.com.cn/s/blog_5da93c8f0101g4wb.html

②利用反射机制通过按钮关闭对话框:

http://blog.csdn.net/nokiaguy/article/details/5770263


ps:另外,貌似Android 4.1后上述接听电话的方法就不可以了,高版本的解决方法如下:

http://bbs.51cto.com/thread-1078059-1.html



好了,关于Java反射浅析就暂时了解到这里吧,后续遇到相关的再mark~大笑


《UDS协议从入门到精通(UDS速查手册)》(完结撒花版) 专栏总目录,文中介绍了UDS协议相关的基础知识和一些术语,给出了详细介绍6大类26种服务的跳转目录。 阅读详情

相关推荐

紫光展锐面试——FPGA/IC设计面试面经案例总结

自我介绍;研究生的主要研究方向是什么?为什么想要应聘数字芯片相关的工作?简单介绍下数字IC设计流程。逻辑综合主要做什么?你有实际做过逻辑综合工作吗?你了解SS corner和FF corner吗?综合时应该使用哪个corner?综合时需要考虑hold吗?为什么?提高时钟频率对setup和hold有什么影响?为什么?hvt、rvt/svt、lvt有什么区别?c40、c50是指什么概念?有什么区别?你对EDA工具有过了解吗?

FPGA/MATLAB学习教程/源码/项目合作开发 1487

反射机制应用实例

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制JAVA反射(放射)机制:"程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言"。从这个观点看,Perl,Python,Ruby是动态语言,C++Java,C#不是动态语言

ywj_486的博客 388

一张让你通俗易懂得理解java反射机制

一张让你通俗易懂得理解java反射机制

Java反射

反射 目标 理解什么是反射 反射的原理 如何获取字节码对象 掌握获取类中信息的常用方法 能够编写一些简单的反射案例使用 一,反射 1.1 反射概述 反射是框架的灵魂! ​ JAVA反射机制:是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 ​ 可以拿到类的字节码对象,通过字节码对象拿到这个类中所有的信息。 ​ (类的信息:类名,包名,属性,构造方法,普通方

qq_29864549的博客 303

反射机制的运用实例

反射机制的运用实例: 实例一:使用反射机制绕过类型检查(泛型) //创建集合对象,指定元素类型 ArrayList<String> al = new ArrayList<String>(); al.add("hello"); //获取Class类对象 Class<? extends ArrayList

qq_53983985的博客 312

Java 中的反射机制(两万字超全详解)

文章目录一、反射概述1. 什么是反射?2. 反射机制原理3. 反射优点和缺点4. 类加载概述5. 类加载各阶段完成的功能5.1 加载阶段5.2 连接阶段——验证5.3 连接阶段——准备5.4 连接阶段——解析5.5 初始化阶段二、Class 类1. 动态加载2. 小结三、访问字段1. 获取字段值2. 设置字段值3. 小结四、调用方法1. 调用方法2. 调用静态方法3. 调用非 public方法4. 多态5. 小结五、调用构造方法六、获取继承方法1. 获取父类的Class2. 获取interface3. 继承

林二月的博客 3万+

【转载】Java反射机制浅析+应用实例

注:原文作者coder-pig 原文请戳介里:http://blog.csdn.net/coder_pig/article/details/44784399 说到java反射机制,小花是个小白,所以看这篇文章有点耗时有点累,对这个很陌生,不知大家看了有何感想。 另外附上小猪文中提到的《慕课网》视频地址:http://www.imooc.com/video/3725

静静是小花的博客 714

浅析Java中的反射机制原理

反射反射,程序员的快乐!        Java反射机制使用的还是比较广泛的,系统的灵活性、可扩展性大都都是通过反射等方式来加载外部插件,使得系统与插件解耦的同时,增加了功能。但是很多人都只是会用,却是不知道它的实现机制,今天就由我来带大家揭开反射机制的神秘面纱。        Java中是用Class.forName(classname)来反射类。 package com.j

崔成龙 . 勇往直前 4万+

java反射机制浅谈

一、java反射机制浅谈最近研究java研究得很给力,主要以看博文为学习方式。以下是我对java反射机制所产生的一些感悟,希望各位童鞋看到失误之处不吝指出。受到各位指教之处,如若让小生好好感动,说不定会请各位吃饭哦!1.何谓反射机制根据网文,java中的反射机制可以如此定义:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。2.反射机制如何实现谈到反射机

Winiex's Blog 12万+

Java反射机制

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取信息以及动态调用对象的方法的功能称为java语言的反射机制。在仅知道“包名+类名”的情况下使用。动态获取类的信息。

2303_77640525的博客 2176

浅析Java反射机制

这篇文章简单分析了Java反射机制. 反射机制十分强大,是Spring框架的核心

博言杂谈 377

Java 反射机制应用实例

反射是java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接。l例如:DTO的数据封装

Noseparte的博客 1316

JAVA中的反射机制理解与浅析

java反射机制 反射的理解 示例代码

永远不要停下学习的脚步。 4104

浅析java反射机制(详解)

Java中,反射机制(Reflection)非常重要,但对于很多开发者来说,这并不容易理解,甚至觉得有点神秘~在此,我将献上一份Java反射机制的个人粗略见解,希望你们会喜欢。

weixin_62079735的博客 701

浅析Java反射机制

1、JAVA反射机制是指,在程序运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。之所以能做到这一点,靠的是java中Class类,该类是用于描述字节码文件的类,通过该类的实例化对象可以得到该对象所表示的类的所有信息,包括类中的构造器,字段,以及类方法。因此简单来说,反

IT_GJW的博客 491

Java 反射机制浅析

Java 反射机制浅析       Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提出很快引发了计算机

IT张先生 454

Java反射机制

1. 定义:是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。还有更多的方法,但是用来连接jdbc已经够了,如果想要反射的更多代码,私聊我,我的qq:492539626.newInstance() 创建此 Class 对象所表示的类的一个新实例。不使用new关键字创建对象的方法。3. 对象名.getClass()1. Class类中的常用方法。2. 类名.class。

2302_80464795的博客 1148

java反射机制的应用_Java反射机制应用实例

一:什么是反射机制简单的来说,反射机制指的是程序在运行时能够获取自身的信息。在Java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息。二:哪里用到反射机制我们用过一些知识,但是并不知道它的专业术语是什么,在刚刚学JDBC时用过一行代码:Class.forName("com.mysql.jdbc.Driver.class").newInstance();但是那个时候只知道那行代码是生...

weixin_33994072的博客 186

基于MATLAB的低压直流配电网仿真模型

该压缩文件包含一个针对低压直流配电网络的MATLAB仿真模型,重点研究其在工业环境中的实际应用。MATLAB作为工程计算与系统仿真的核心平台,为直流电网的建模与分析提供了专业工具。随着分布式能源与微电网技术的发展,直流配电系统因其独特优势在工业领域逐步替代传统交流方案,尤其在提升能效与增强供电可靠性方面表现突出。低压直流配电系统的主要特征包括:首先,直流网络能够规避交流系统中的功率因数补偿需求,显著降低谐波干扰,从而提升电能转换的整体效率。该系统更便于整合太阳能、风能等可再生能源,并直接适配各类直流终端设备,如高效照明装置与电动汽车充电设施。其次,MATLAB的电力系统专用模块与Simulink动态仿真环境可用于构建完整的直流电网架构,模拟其电压调节机制、功率传输特性及安全防护功能。模型通常涵盖发电单元、功率变换装置、直流断路设备、母线结构及负载模块等关键部分,各组件均采用特定控制算法,例如脉宽调制技术与平均化建模方法。在控制策略方面,低压直流系统需实现精确的电压与电流管理,常用方法包括恒定电压电流调控及恒功率因数控制等。工业场景中,此类系统能够优化能源分配流程,支持设备的灵活接入,简化电气线路布局,并更好地适应自动化生产线的动态需求。同时,系统需配置完善的故障防护机制,以应对过压、过流及短路等异常工况,这通常涉及快速保护算法与继电器协调设置。通过该模型的仿真分析,可掌握在MATLAB中设计与评估低压直流配电网络的技术方法,深入理解其在工业场景中的优化部署方案。此项研究亦有助于把握电力系统的发展方向,特别是清洁能源与直流技术融合的前沿趋势。资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!

上一篇: RecyclerView技术栈
下一篇: Android 数据存储 之 SQLite数据库详解
satanmp
博客等级 码龄19年 2粉丝 3原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值