`
zhjb2000
  • 浏览: 58327 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

浅析JAVA反射(一)

阅读更多

Java Reflection (JAVA反射)
Reflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性。例如,使用它能获得 Java 类中各成员的名称并显示出来。
Java 的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。例如,Pascal、C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息。
JavaBean 是 reflection 的实际应用之一,它能让一些工具可视化的操作软件组件。这些工具通过 reflection 动态的载入并取得 Java 组件(类) 的属性。

像Struts2.0 Hibernate Spring 都是利用了这一特性。

下面先看一个简单例子 打印一个类里面的属性和方法,代码比较简单,在这里久不解释了,运行一下看看结果就明白了。

  1. importjava.lang.reflect.Field;
  2. importjava.lang.reflect.Method;
  3. importjava.lang.reflect.Modifier;
  4. publicclassTest{
  5. publicstaticvoidmain(String[]args){
  6. show("java.util.Date");
  7. }
  8. /**
  9. *打印一个类里面定义的属性和方法
  10. *@paramclassName
  11. */
  12. @SuppressWarnings("unchecked")
  13. privatestaticvoidshow(StringclassName){
  14. try{
  15. Classc=Class.forName(className);
  16. //获取定义的属性
  17. Field[]fields=c.getDeclaredFields();
  18. System.out.println(className+"类包含的属性有:");
  19. for(Fieldf:fields){
  20. intmod=f.getModifiers();
  21. System.out.println(((mod==0)?""
  22. :(Modifier.toString(mod)+""))
  23. +getTypeName(f.getType())+""+f.getName());
  24. }
  25. System.out.println("------------------------------------------------");
  26. //获取定义的方法
  27. Method[]methods=c.getDeclaredMethods();
  28. System.out.println(className+"类包含的方法有:");
  29. StringBuffersb=newStringBuffer();
  30. for(Methodm:methods){
  31. intmod=m.getModifiers();
  32. if(mod!=0){
  33. //得到访问控制修饰符
  34. sb.append(Modifier.toString(mod)+"");
  35. }
  36. sb.append(getTypeName(m.getReturnType())+"");
  37. sb.append(m.getName()+"(");
  38. Class[]params=m.getParameterTypes();
  39. for(intj=0;j<params.length;j++){
  40. sb.append(getTypeName(params[j]));
  41. if(j<(params.length-1))
  42. sb.append(",");
  43. }
  44. sb.append(")");
  45. System.out.println(sb.toString());
  46. sb.delete(0,sb.length());
  47. }
  48. }catch(Exceptione){
  49. e.printStackTrace();
  50. }
  51. }
  52. /**
  53. *此方法来自java.lang.reflect.Field
  54. *@paramtype
  55. *@return
  56. */
  57. @SuppressWarnings("unchecked")
  58. privatestaticStringgetTypeName(Classtype){
  59. if(type.isArray()){//如果是数组类型
  60. try{
  61. Classcl=type;
  62. intdimensions=0;//数组的维度
  63. while(cl.isArray()){
  64. dimensions++;
  65. cl=cl.getComponentType();
  66. }
  67. StringBuffersb=newStringBuffer();
  68. sb.append(cl.getName());
  69. for(inti=0;i<dimensions;i++){
  70. sb.append("[]");
  71. }
  72. returnsb.toString();
  73. }catch(Throwablee){/*FALLTHRU*/
  74. }
  75. }
  76. returntype.getName();
  77. }
  78. }

在制作这个例子的时候参考了java.lang.reflect.Method.toString() 方法 和java.lang.reflect.Field.toString()方法。

今天先来个简单的例子,下一篇将介绍如何利用反射机制。最常用的就是 从request 到pojo的属性拷贝,以及两个JavaBean之间的属性复制

分享到:
评论

相关推荐

    Java 反射机制浅析

    Java反射机制是Java编程语言中一个强大的特性,它允许程序在运行时动态地获取类的信息并操作类的对象。反射机制的核心在于,它打破了编译时的束缚,使得代码具有更高的灵活性和可扩展性。在Java中,反射主要依赖于`...

    浅析Java 反射机制的用途和缺点

    "浅析Java 反射机制的用途和缺点" Java 反射机制是一种强大的技术,可以让应用程序做一些几乎不可能做到的事情。它可以让程序在运行时检测或修改程序行为,是 Java 语言中一个相对高级的特性。开发者可以使用反射...

    深入浅析Java反射机制

    Java反射机制是Java编程语言中一个强大的工具,它允许程序在运行时动态地获取类的信息并操作类的对象。反射机制的核心在于,它打破了程序编译时的静态性,提供了对类、接口、字段和方法的动态访问能力。通过反射,...

    浅析Java泛型的使用.pdf

    【Java泛型】Java泛型是自Java SE 1.5版本引入的一种强大的类型系统增强,旨在提升代码的安全性和重用性。它允许我们在编写代码时指定容器(如List、Set、Map等)能存储何种类型的元素,从而避免运行时的类型转换...

    深入Java单例模式浅析

    枚举单例模式是Joshua Bloch在《Effective Java》中推荐的实现方式,它既保证了线程安全,又避免了反射和序列化攻击,简洁且安全。 ```java public enum SingletonClass { INSTANCE; } ``` 调用方式是`...

    Java反射机制(Reflection)浅析

    Java反射机制(Reflection)是Java语言提供的一种强大的能力,它允许程序在运行时动态地获取类的信息并操作类的对象。这种机制使得Java具备了高度的灵活性和动态性,尤其是在处理未知类或者需要根据条件动态调用类的...

    深入浅析Java注解框架

    Java注解框架是Java编程语言中的一个重要特性,它允许开发者在代码中添加元数据,以提供额外的信息,如编译器指令、运行时检查或框架的配置信息。注解的本质是与程序代码关联的特殊标记,它们在编译时或运行时通过...

    Java基础知识点 - 内容比较全面

    7. **Java中的反射机制**:反射允许程序在运行时检查类、接口、字段和方法的信息,动态创建对象并调用方法。它是Java动态性的重要体现,广泛应用于插件系统、框架和测试工具。 8. **Java中Heap与Stack的区别**:堆...

    java与php的区别浅析

    5、反射概念:Java从第一天开始就在内部具有反射概念,如接口,重复类,抽象类或方法概念。PHP 5.0以前没有任何反射概念,从PHP 5.0开始,它引入了这个功能,但与Java相比并没有那么大的进步。 6、页面加载速度:...

    浅析java中 Spring MVC 拦截器作用及其实现

    在Java的Spring MVC框架中,拦截器(Interceptor)是一个强大的工具,它允许开发者在请求处理的前后阶段执行自定义逻辑,比如进行权限检查、日志记录、性能统计等。这篇文章将深入探讨Spring MVC拦截器的作用、实现...

    XML架构浅析.pdf

    在现代编程环境中,如.NET Framework和Java,反射扮演着重要角色。它可以减少开发者必须考虑的问题数量,并且使得创建更高效的工具变得可能。例如,在.NET Framework中,公共语言运行时(CLR)提供了安全、垃圾回收...

    Android框架浅析之锁屏(Keyguard)机制原理

    ### Android框架浅析之锁屏(Keyguard)机制原理 #### 一、锁屏界面的组成 锁屏(Keyguard)是Android系统中的一个重要组成部分,它主要用于保护用户的隐私数据不被未授权访问。锁屏功能主要由两个部分组成:解锁...

    JFinal技术架构浅析.doc

    JFinal 是一个基于Java语言的轻量级Web开发框架,其设计目标是简化开发、提高效率,让开发者能够更专注于业务逻辑的实现。本篇文档将对JFinal的技术架构进行浅析,帮助读者理解其核心设计理念和工作原理。 1. **...

    java中hashcode()和equals()的详解.docx

    在Java编程语言中,`hashCode()`与`equals()`方法是非常重要的概念,它们不仅对于深入理解Java内存管理至关重要,也是实现自定义类的关键部分之一。本文将详细介绍这两个方法的工作原理、使用场景以及在Java集合框架...

    Java动态代理简单应用

    概念  代理模式是基本的设计模式之一,它是开发者为了提供额外的或...  Java动态代理实现机制采用了反射的思想,有关于反射的基础知识,可以参见博客Java发射机制浅析。  原理  Spring核心AOP实现技术之一是采用

    浅析道路检测技术的要点及应用.docx

    本文将浅析当前几种主流的道路检测技术要点及其应用情况。 首先,探地雷达技术(GPR)是近年来广泛应用于道路检测的技术之一。它通过发射电磁波并接收其在地下介质中传播的回波,从而识别和评估路面下方结构的状况...

    JNI资源汇总

    - **类和结构体**:JNI支持对Java类的反射操作,以及将Java对象映射到C/C++的结构体。 5. **学习资源**: - "Android JNI开发入门与提高":这份文档可能涵盖了JNI的基础知识,如如何创建和调用本地方法,以及进阶...

    浅析使用JDBC操作MySQL需要添加Class.forName("com.mysql.jdbc.Driver")

    在Java编程中,JDBC(Java Database Connectivity)是用于与各种数据库进行交互的一组接口和类。当我们使用JDBC操作MySQL数据库时,通常会在代码中看到`Class.forName("com.mysql.jdbc.Driver")`这一行,这行代码的...

Global site tag (gtag.js) - Google Analytics