欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年JAVA的内省机制与反射机制 .pdf

    • 资源ID:27253407       资源大小:41.77KB        全文页数:5页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年JAVA的内省机制与反射机制 .pdf

    JAVA的内省机制( introspector)与反射机制( reflection)2010-05-05 20:49 相对而言, 反射比内省更容易理解一点。用一句比较白的话来概括, 反射就是让你可以通过名称来得到对象 ( 类,属性,方法 ) 的技术,这种技术比内省机制使用范围更广泛。例如我们可以通过类名来生成一个类的实例;知道了方法名,就可以调用这个方法; 知道了属性名就可以访问这个属性的值。内省是 Java 语言对 Bean 类属性、事件的一种缺省处理方法。 例如类 A 中有属性 name, 那我们可以通过 getName,setName 来得到其值或者设置新的值。通过getName/setName 来访问 name 属性,这就是默认的规则。 Java 中提供了一套API 用来访问某个属性的 getter/setter 方法, 通过这些 API 可以使你不需要了解这个规则 (但你最好还是要搞清楚) ,这些 API 存放于包 java.beans 中。一般的做法是通过类 Introspector 来获取某个对象的 BeanInfo 信息,然后通过 BeanInfo 来获取属性的描述器 ( PropertyDescriptor ),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后我们就可以通过反射机制来调用这些方法。 下面我们来看一个例子, 这个例子把某个对象的所有属性名称和值都打印出来:Java 代码1. package MyTest; 2. publicclass bean 3.private String id = null ; 4.private String name = null ; 5.6.public String getId() 7.return id; 8. 9.publicvoid setId(String id) 10. this .id = id; 11. 12. 13. public String getName() 14. return name; 15. 16. publicvoid setName(String name) 17. this .name = name; 18. 19. 20. 21. package MyTest; 22. import java.beans.BeanInfo; 23. import java.beans.EventSetDescriptor; 24. import java.beans.Introspector; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - 25. import java.beans.MethodDescriptor; 26. import java.beans.PropertyDescriptor; 27. import java.lang.reflect.Method; 28. publicclass myBeanIntrospector 29. public myBeanIntrospector() 30. 31. try32. 33. / 实例化一个 Bean 34. bean beanObj = new bean(); 35. / 依据 Bean产生一个相关的BeanInfo 类36. BeanInfo bInfoObject = 37. Introspector.getBeanInfo(beanObj.getClass(),beanObj.getClass().getSuperclass(); 38. / 定义一个用于显示的字符串39. String output = ; 40. 41. / 开始自省42. 43. /* 44. * BeanInfo.getMethodDescriptors() 45. * 用于获取该 Bean中的所有允许公开的成员方法,以MethodDescriptor数组的形式返回46. * 47. * MethodDescriptor类48. * 用于记载一个成员方法的所有信息49. * MethodDescriptor.getName() 50. * 获得该方法的方法名字51. * MethodDescriptor.getMethod() 52. * 获得该方法的方法对象( Method 类)53. * 54. * Method类55. * 记载一个具体的的方法的所有信息56. * Method.getParameterTypes() 57. * 获得该方法所用到的所有参数,以Class 数组的形式返回58. * 59. * Class.getName() 60. * 获得该类型的名字61. */62. output = 内省成员方法: n ; 63. MethodDescriptor mDescArray = bInfoObject.getMethodDescriptors(); 64. for ( int i= 0;i0) 75. 76. / 获得参数的类型的名字77. methodParams = parameters0.getName(); 78. for ( int j= 1;jparameters.length ;j+ ) 79. 80. methodParams = methodParams + , + parametersj.getName(); 81. 82. 83. output += methodName + ( + methodParams + )n ; 84. 85. System.out.println(output); 86. 87. /* 88. * BeanInfo.getPropertyDescriptors() 89. * 用于获取该 Bean中的所有允许公开的成员属性,以PropertyDescriptor数组的形式返回90. * 91. * PropertyDescriptor类92. * 用于描述一个成员属性93. * 94. * PropertyDescriptor.getName() 95. * 获得该属性的名字96. * 97. * PropertyDescriptor.getPropertyType() 98. * 获得该属性的数据类型,以Class 的形式给出99. * 100. */101. output = 内省成员属性: n ; 102. PropertyDescriptor mPropertyArray = bInfoObject.getPropertyDescriptors(); 103.for ( int i= 0;imPropertyArray.length ;i+ ) 104. 105. String propertyName = 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 5 页 - - - - - - - - - mPropertyArrayi.getName(); 106. Class propertyType = mPropertyArrayi.getPropertyType(); 107. output += propertyName + ( + propertyType.getName() + )n; 108. 109. System.out.println(output); 110.111.112./* 113. * BeanInfo.getEventSetDescriptors() 114. * 用于获取该 Bean中的所有允许公开的成员事件,以EventSetDescriptor数组的形式返回115. * 116. * EventSetDescriptor类117. * 用于描述一个成员事件118. * 119. * EventSetDescriptor.getName() 120. * 获得该事件的名字121. * 122. * EventSetDescriptor.getListenerType() 123. * 获得该事件所依赖的事件监听器,以Class 的形式给出124. * 125. */126. output = 内省绑定事件: n ; 127. EventSetDescriptor mEventArray = bInfoObject.getEventSetDescriptors(); 128.for ( int i= 0;imEventArray.length ;i+ ) 129. 130. String EventName = mEventArrayi.getName(); 131. Class listenerType = mEventArrayi.getListenerType(); 132. output += EventName + ( + listenerType.getName() + )n; 133. 134. System.out.println(output); 135. System.out.println(write by esonghui :); 136.137. 138.catch (Exception e) 139. 140. System.out.println( 异常: + e); 141. 142. 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 5 页 - - - - - - - - - 143.publicstaticvoid main(String args) 144. 145.new myBeanIntrospector(); 146. 147. 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 5 页 - - - - - - - - -

    注意事项

    本文(2022年JAVA的内省机制与反射机制 .pdf)为本站会员(Che****ry)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开