`
中南java人
  • 浏览: 6259 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于枚举、反射、内省的总结

 
阅读更多

       对于jdk1.5之后追加的一些技术,有相当多的一些部分是为做框架用的,在初识这些技术后觉得有必要对此做下总结。 

         枚举简而言之就是一种限制传指定对象的特殊类,其也相当于在该类的构造函数中定义了某些final,static的该类对象,枚举有自己的构造函数,字段,方法。当枚举中只传入一个对象时,也就相当于所谓的单实例模式。以简单的定义枚举People类为例。 
             enum people{ a(1) ,b(2); 
                            int a; 
                            private people(int a){ this.a=a; } 
                            public int geta(){ return a; } }
这样可通过以下代码测试: 
                   People po[]=People.values(); 
                   for(People po:pe){System.out.println (po.geta())};
输出结果为:1,2
另外对于枚举类的构造器必须为私有,这样才会体现枚举的意义所在。 
      反射可以说是整个javase的精髓所在,其很好的体现了面向对象的思想,一般用于加载类,解剖类的各个字节流,大多用在做框架时引用该类的字段,属性,方法。
以解析类的字段为例:Class c=Class.forName("cn.test.reflect.Person");//加载类
                                   Constructor co =c.getConstructor(String.class);//得到构造器
                                   Person p= (Person) co.newInstance("a")  ;//构造实例
通过反射可以把类的字段,构造器,方法都以对象的形式表现出来,不禁感慨在java整个系统中,万物皆对象。 
     内省是个与反射较相似的技术,一般作用于javabean类的信息提取与修改。提到javabean不得不吐槽下字段与属性的区别,字段是指一个类定义的全局变量,而属性是指该类具体能通过getXX()方法得到的变量,所以任何一个类都有一个默认的属性:getclass().还是以Javabean类People为例,有age ,name等属性。 
      BeanInfo be=Introspector.getBeanInfo(People.class,Object.class); //得到给Javabean的BeanInfo信息 
      PropertyDescriptor[] po=  be.getPropertyDescriptors();//得到属性描述器 
      for(  PropertyDescriptor pr:po){
               System.out.println(pr.getName())};//遍历该JavaBean的属性
也可对JavaBean的各个属性值进行读取与修改 
   PropertyDescriptor pr=new PropertyDescriptor("age", People.class);//得到该JavaBean age属性的描述器 
   Method me= pr.getWriteMethod();//得到修改值的方法 
   People p=new People(); 
   me.invoke(p, 23);// 将上面对象的年龄改为23 
       当然,这只是这些技术的冰山一角,总之还是那句话 ,在java里,万物皆对象。




 

分享到:
评论

相关推荐

    候捷谈Java反射机制

    主要探讨的关键词包括Introspection(内省)和Reflection(反射)。内省是指程序在运行时自我检查和分析的能力,而反射则是实现这一能力的关键工具。 通常,动态语言允许程序在运行时改变其结构或变量类型。虽然...

    JAVA反射侯捷观点

    本文适合具备Java语言基础的读者阅读,主要使用JDK1.5,并涉及关键词Introspection(内省)和Reflection(反射)。内省是指程序自我检查和理解的能力,而反射则是这一能力的具体实现,它使Java程序能够在运行时加载...

    张孝祥Java基础加强ppt.ppt

    eclipse的使用技巧 静态导入 可变参数与for循环增强 基本数据类型的自动拆箱与装箱 枚举 反射 JavaBean内省 beanutils工具包 注解 泛型 类加载器 代理 线程并发库

    Java基础加强-个人总结doc

    通过反射,我们可以动态创建对象、调用方法、访问私有成员,以及处理枚举和注解。这是Java灵活性的重要体现,常用于框架开发和元编程。 3. **内省(Introspection)**:内省是Java提供的一组API,用于在运行时检查...

    jdk5特性总结PPT

    9. **内省(Introspection)和反射(Reflection)增强** JDK 5增强了对注解的反射支持,可以检查和操作类、接口、方法和字段上的注解,增加了编程的灵活性。 10. **NIO.2(New I/O 2)** 虽然JDK 5没有完全引入...

    java基础加强ppt(张孝祥版_黎活明版)

    java基础加强ppt(张孝祥版_黎活明版)eclipse的使用技巧、静态导入、可变参数与for循环增强、基本数据类型的自动拆箱与装箱、枚举、反射、JavaBean内省、beanutils工具包、注解、泛型、类加载器、代理、线程并发库

    Java5.0学习笔记

    10. **内省增强**:Java 5.0对反射API进行了改进,使得在运行时检查和修改对象的属性和行为更为便捷。 11. **枚举常量的比较**:Java 5.0中的枚举类型实现了`Comparable`接口,使得枚举常量之间可以直接进行比较,...

    Thinking in Java 3rd Edition 中文版(最好的版本).rar

    《Thinking in Java》第三版还涵盖了输入/输出(I/O)、网络编程、反射、枚举、内省、XML处理等高级主题。这些内容可以帮助读者更深入地理解Java平台的全貌,并能处理各种实际开发中的问题。 总之,《Thinking in ...

    良葛格Java JDK 5.0学习笔记

    Java 5.0对内省和反射进行了优化,允许程序在运行时动态地获取类的信息并操作类的对象,增强了Java的灵活性。 十、枚举常量的compareTo方法 Java 5.0为枚举类型添加了compareTo方法,使得枚举常量可以按照自然顺序...

    30天轻松掌握javaweb 课堂笔记完整版

    在本课堂笔记完整版中,涉及到了关于JavaWeb学习的全面知识点,内容广泛且详尽,涵盖了从基础语法到框架应用,从工具使用到高级技术的深入讲解。以下是根据给出的内容整理出的知识点: 1. **Eclipse的使用**: - ...

    java加强笔记

    总结分析动态代理类的设计原理与结构 - 动态代理类的设计通常包括代理接口、目标对象、代理对象和InvocationHandler。 ##### 7. 编写可生成代理和插入通告的通用方法 - 可以编写通用方法来自动生成代理对象,并在...

    Java-jdk1.5安装包

    Java 5.0增强了反射API,使得开发者可以通过反射访问和修改类的私有字段,调用私有方法,以及获取和设置泛型信息。 总结,Java JDK1.5在语言层面带来了许多创新,极大地提升了开发效率和代码质量。泛型、枚举、注解...

    jdk5_64.zip

    内省则是通过反射机制获取类的元数据信息,如字段、方法等。 九、动态代理(Dynamic Proxy) JDK5引入的动态代理机制,允许在运行时创建实现了特定接口的新类。这在AOP(面向切面编程)中尤为有用,可以方便地实现...

    良葛格Java JDK 5.0学习笔记ch05

    在Java 5.0中,内省API(如java.lang.reflect包)得到了加强,使得反射操作更加方便。例如,现在可以使用Annotations API来访问和处理类、方法、字段上的注解。 十、静态导入 静态导入允许一次性导入某个类的所有...

    JAVA 2应用编程150例

    10. **chap12**:可能包含高级主题,如反射、注解、枚举、内省、JNI(Java Native Interface)或者并发编程的高级话题。 每一个章节的源代码示例都是理论知识的具体实现,读者可以通过运行和修改代码来加深理解。...

    JAVA5.0API_CN

    Java 5.0通过`java.lang.reflect`包提供了对运行时类信息的访问,包括获取方法、字段和构造器等,支持动态代理和反射操作。 9. **并发编程改进** Java 5.0引入了`java.util.concurrent`包,提供了线程池、并发...

    Java5.0 Tiger程序高手秘笈

    Java 5.0改进了反射API,提供了更多的类和方法来获取关于类、接口、字段和方法的信息,比如`getDeclaredConstructors()`和`getGenericSignature()`。 9. **并发工具类(Concurrent Utilities)** 新增了`java....

    javaAPI 5.0中文.rar,javaAPI 5.0中文.rar

    通过查阅"API 5.0中文.chm"文件,你可以详细了解到这些特性和更多其他功能,包括IO流、网络编程、异常处理、集合框架、多线程、反射以及各种内置类和接口的使用方法。这个中文版的API文档对于学习和应用Java 5.0技术...

    jdk1.5绿色版

    10. **内省增强(Enhanced Reflection)**:改进了反射API,提供了获取泛型类型信息的能力。 11. **并发工具类(Concurrent Utilities)**:在java.util.concurrent包中引入了许多新的并发控制工具,如Executor框架...

    Java基础知识加强PPT

    总的来说,这个PPT覆盖了Java编程中的一些重要概念,包括但不限于Eclipse的高效使用、静态导入、增强for循环、可变参数、自动装箱与拆箱、枚举、反射、JavaBean、注解以及泛型等。掌握这些知识将有助于提升Java...

Global site tag (gtag.js) - Google Analytics