反射

反射
   一、反射是什么:
反射个人理解就类似于“反侦察”,哈哈。,其实我感觉就是这样。java中差不多是这样的一个目的来实现 反射的。

  二、为什么用它
反射是java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接。但是反射使用不当会成本很高!
          1,反编译:.class-->.java

                   2,通过反射机制访问java对象的属性,方法,构造方法等;

这样好像更容易理解一些,(举个简单的例子:将前台的所传参数,在控制层直接转换成一个类对象)下边我们具体看怎么实现这些功能。

 三、sun给我们常用的反射机制类:

java.lang.Class;              

java.lang.reflect.Constructor; java.lang.reflect.Field;        

java.lang.reflect.Method;

java.lang.reflect.Modifier;

  

    四、具体的功能实现:

     1,反射机制获取类有三种方法,我们来获取Employee类:



注意:这里是获取类 , 并不是获取类对象

                     2 ,创建对象:获取类以后我们来创建它的对象,利用newInstance
     

                    3获取属性:分为所有的属性和指定的属性:

          a,先看获取所有的属性的写法:

   


                          b,获取特定的属性,对比着传统的方法来学习:

                                

                    4,获取方法,和构造方法,不再详细描述,只来看一下关键字:

方法关键字

含义

getDeclaredMethods()

获取所有的方法

getReturnType()

获得方法的放回类型

getParameterTypes()

获得方法的传入参数类型

getDeclaredMethod("方法名",参数类型.class,……)

获得特定的方法

 

 

构造方法关键字

含义

getDeclaredConstructors()

获取所有的构造方法

getDeclaredConstructor(参数类型.class,……)

获取特定的构造方法

 

 

父类和父接口

含义

getSuperclass()

获取某类的父类

getInterfaces()

获取某类实现的接口


这样我们就可以获得类的各种内容,进行了反编译。对于JAVA这种先编译再运行的语言来说,反射机制可以使代码更加灵活,更加容易实现面向对象


 五,反射加配置文件,使我们的程序更加灵活

             在设计模式学习当中,学习抽象工厂的时候就用到了反射来更加方便的读取数据库链接字符串等

   当时不 是太理解,就照着抄了。看一下.NET中的反射+配置文件的使用:

             当时用的配置文件是app.config文件,内容是XML格式的,里边填写链接数据库的内容:

附注:其实这里可以稍微理解一下我们可能之前都有听说过的: 反射可以使的 类属性(成员变量值)发  生变化,造成不安全的原因 。通过加载配置文件实现动态的 连接数据库,配置数据库 。其实就是反射的 一最大体现。  

  1.       <configuration>  
  2.             lt;appSettings>  
  3.              <add     key=""  value=""/>  
  4.             lt;/appSettings>  
  5.      </configuration>  


 反射的写法:   

  1. assembly.load("当前程序集的名称").CreateInstance("当前命名空间名称".要实例化的类名);  

 

          这样的好处是很容易的方便我们变换数据库,例如我们将系统的数据库从SQL Server升级到Oracle,那么我们写两份D层,在配置文件的内容改一下,或者加条件选择一下即可,带来了很大的方便。

            

         当然了,JAVA中其实也是一样,只不过这里的配置文件为.properties,称作属性文件。通过反射读取里边的内容。这样代码是固定的,但是配置文件的内容我们可以改,这样使我们的代码灵活了很多!


  综上为,JAVA反射的再次学习,灵活的运用它,能够使我们的代码更加灵活,但是它也有它的缺点,就是运用它会使我们的软件的性能降低,复杂度增加,所以还要我们慎重的使用它。








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值