首頁  >  文章  >  Java  >  JAVA中的反射機制

JAVA中的反射機制

高洛峰
高洛峰原創
2016-12-12 11:40:471210瀏覽

           反射,當時常聽他們說,自己也看過一些資料,也可能在設計模式中使用過,但是感覺對它沒有一個較深入的了解,這次重新學習了一下,感覺還行吧!


           一,先看一下反射的概念:

           

           所描述行為的狀態和相關的語意。

             反射是Java中一個強大的工具,並且能夠使我們很方便的創建靈活的程式碼,這些程式碼可以再運行時裝配,無需在組件之間進行原始程式碼連結。但是反射使用不當會成本很高!

             看著概念很暈的,並繼續往下看。

 

      二,反射機制的作用:

             機制存取java物件的屬性,方法,建構方法等;

             則較容易理解一些,下邊我們具體看怎麼實現這些功能。


      三,這裡先來看看sun為我們提供了那些反射機制中的類別:

java.lang.Class;     .reflect.Field;

java.lang.reflect.Method;

java.lang.reflect.Modifier;

           還是哪句話要學著不斷的查詢API,那才是我們最好的老師。

         四,以作用方式實現:

            :取得類別以後我們來創建它的對象,利用newInstance:

//第一种方式:  
Classc1 = Class.forName("Employee");  
//第二种方式:  
//java中每个类型都有class 属性.  
Classc2 = Employee.class;  
   
//第三种方式:  
//java语言中任何一个java对象都有getClass 方法  
Employeee = new Employee();  
Classc3 = e.getClass(); //c3是运行时类 (e的运行时类是Employee)

    3,取得屬性:分為所有的屬性和指定的屬性:

      a,先看獲取所有的屬性的寫法:

[java] view plain copy
 print?
Class c =Class.forName("Employee");  
  
//创建此Class 对象所表示的类的一个新实例  
Objecto = c.newInstance(); //调用了Employee的无参数构造方法.

   b,獲取特定的屬性,對比傳統的方法來學習:
//获取整个类  
            Class c = Class.forName("java.lang.Integer");  
              //获取所有的属性?  
            Field[] fs = c.getDeclaredFields();  
       
                   //定义可变长的字符串,用来存储属性  
            StringBuffer sb = new StringBuffer();  
            //通过追加的方法,将每个属性拼接到此字符串中  
            //最外边的public定义  
            sb.append(Modifier.toString(c.getModifiers()) + " class " + c.getSimpleName() +"{\n");  
            //里边的每一个属性  
            for(Field field:fs){  
                sb.append("\t");//空格  
                sb.append(Modifier.toString(field.getModifiers())+" ");//获得属性的修饰符,例如public,static等等  
                sb.append(field.getType().getSimpleName() + " ");//属性的类型的名字  
                sb.append(field.getName()+";\n");//属性的名字+回车  
            }  
      
            sb.append("}");  
      
            System.out.println(sb);
 b,

 4,取得方法,和建構方法,不再詳細描述,只來看關鍵字:

       這樣我們就可以獲得類別的各種內容,並進行了反編譯。對於JAVA這種先編譯再運行的語言來說,反射機制可以讓程式碼更靈活,更容易實現物件導向。

JAVA中的反射機制 

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

            不是太理解,就照著抄了。來看看.NET中的反射+設定檔的使用:

             當時使用的設定檔是app.config文件,內容為XML格式的,裡面填寫註解 這樣的好處是很容易的方便我們變換資料庫,例如我們將系統的資料庫從SQL Server升級到Oracle,那麼我們寫兩份D層,在設定檔的內容改一下,或者加條件選擇一下即可,帶來了很大的方便。

            

         當然了,而JAVA中其實也一樣,則為只不過這裡的透過反射讀取裡邊的內容。這樣程式碼是固定的,但是設定檔的內容我們可以改,這樣讓我們的程式碼靈活了很多!

    綜上為,JAVA反射的再次學習,靈活的運用它,能夠使我們的程式碼更加靈活,但是它也有它的缺點,就是運用它會使我們的軟體的性能降低,複雜度增加,所以還要我們慎重的使用它。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:Java反射機制下一篇:Java反射機制