java 反射机制

来源:互联网 发布:如何找到淘宝达人 编辑:程序博客网 时间:2024/06/04 00:33
 1 .反射机制的作用:

              1,反编译:.class-->.java

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

             这样好像更容易理解一些,下边我们具体看怎么实现这些功能。


例子: 获得属性

         //加载integer

       Class test1 =Class.forName("danliTest.Student");
       Field[] file = test1.getDeclaredFields();//得到所以得方法属性
        for(int i =0;i<file.length;i++){//遍历这些方法
            System.out.println(file[i]);
        }  


例子    获得类

             首先创建一个类  student   在 danlitest  包下

            Class test1 =Class.forName("danliTest.Student");
            Student stu =(Student) test1.newInstance();  //得到类
            stu.setId(1);

  


         






方法关键字

 

含义

getDeclaredMethods()

获取所有的方法

getReturnType()

获得方法的放回类型

getParameterTypes()

获得方法的传入参数类型

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

获得特定的方法

 

 

构造方法关键字

含义

getDeclaredConstructors()

获取所有的构造方法

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

获取特定的构造方法

 

 

父类和父接口

含义

getSuperclass()

获取某类的父类

getInterfaces()

获取某类实现的接口


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

 

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

             在设计模式学习当中,学习抽象工厂的时候就用到了反射来更加方便的读取数据库链接字符串等,当时不是太理解,就照着抄了。看一下.NET中的反射+配置文件的使用:

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

[html] view plain copy print?在CODE上查看代码片派生到我的代码片
  1.       <configuration>  
  2. lt;appSettings>  
  3. <add     key=""  value=""/>  
  4. lt;/appSettings>  
  5.         </configuration>  

 反射的写法:   

[csharp] view plain copy print?在CODE上查看代码片派生到我的代码片
  1. assembly.load("当前程序集的名称").CreateInstance("当前命名空间名称".要实例化的类名);  

 

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

            

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


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


 



0 0
原创粉丝点击