您的位置:首页 > 编程语言 > Java开发

Java基础加强反射总结

2012-06-24 21:24 471 查看
---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

 

反射就是把java类中的各种成分映射成为相应的java类。

例如:一个java类用一个Class类的对象来表示,一个类中的组成部分:成员变量、方法、构造函数、包等等信息也用一个个java类来表示,就像汽车是一个类,汽车中的发动机,变速箱等等也是一个个的java类,表示java类的Class类显然要提供一系列的方法,来获得其中的变量,方法,构造函数,修饰符,包等信息,这些信息就是用相应类的实例对象来表示,它们是Field、Method、Constructor、Package等等

 

反射说白了就是可以获得一个类的所有信息,主要包括方法和属性两部分。

1.获得方法包括获得方法的名称,方法的返回类型,方法的访问修饰符,以及通过反射执行这个方法。

2.获得属性包括属性的名称,类型,访问修饰符,以及这个属性的值。

1.2 Java类反射中的主要方法

对于以下三类组件中的任何一类来说 -- 构造函数、字段和方法 -- java.lang.Class 提供四种独立的反射调用,以不同的方式来获得信息。调用都遵循一种标准格式。以下是用于查找构造函数的一组反射调用:

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

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

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

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

获得字段信息的Class 反射调用不同于那些用于接入构造函数的调用,在参数类型数组中使用了字段名:

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

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

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

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

用于获得方法信息函数:

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

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

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

        Method[] getDeclaredMethods() -- 获得类声明的所有方法

     反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的以及动态调用对象的方法的功能称为java语言的反射机制。

    Java反射机制主要提供了以下功能:在运行时判定任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判定任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。 

    反射的目的就是为了扩展未知的应用。比如你写了一个程序,这个程序定义了一些接口,只要实现了这些接口的dll都可以作为插件来插入到这个程序中。反射有缺点是性能问题。用于字段和方法接入时反射要远慢于直接代码。性能问题的程度取决于程序中是如何使用反射的。如果它作为程序运行中相对很少涉及的部分,缓慢的性能将不会是一个问题。即使测试中最坏情况下的计时图显示的反射操作只耗用几微秒。仅反射在性能关键的应用的核心逻辑中使用时性能问题才变得至关重要。

---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐