【動態網頁面】(二)Java反射

來源:互聯網
上載者:User

標籤:

    Java的反射機制是Java語言很重要的一個特性,先從Sun官網上看一下官網是如何定義反射機制的。


    大致翻譯一下,翻譯的可能不是很準確。反射(Reflection)是Java程式設計語言的一個特性,它要求Java程式啟動並執行時候檢查或自檢,並且對內部的屬性進行操作。例如,它可以讓一個Java類獲得它自己所有的成員名稱並且顯示出來。這種能夠從一個Java類內部進行檢查和操作的能力聽起來可能不是很受喜歡,但是在其他程式語言中這種特性(功能)根本就不存在。例如,對於Pascla、C或者C#程式就沒有辦法來獲得其內定義的函數。另一個實實在在存在的反射的例子就是在JavaBeans中,軟體組件可以通過構造器來操作。這個構造器就是利用反射來獲得Java的屬性(類)因為它們是動態載入的。

    換句話,通俗一點來理解Java的反射機制,就是在運行狀態下,對於任意一個類都能動態獲得其類下的屬性和方法,對於任意一個對象都能夠調用它的任意一個方法。這種動態擷取資訊和動態調用對象的方法的功能稱為Java的反射機制,而且這種機制是Java語言所特有的的,是別的程式設計語言所不具備的。

    現在很多開源架構都使用反射機制,像Hibernate、Struts都是利用反射機制來實現的。但是我們為什麼要用反射機制呢?想想我們以往是如何?的,在編譯的時候確定一個類型,比如一個類或者一個對象,都是寫死的,固定寫好,然後執行個體化對象或者去調用某個方法,這種方式叫做靜態編譯。那麼與之對應的就是動態編譯了,也就是我們這篇部落格講的Java反射,它的實現原理是在啟動並執行時候再確定類型,然後綁定對象。這種動態編譯的特性極大限度的發揮了Java語言的強大功效,增強了Java的靈活性,體現了多態的應用。

    如果上面那麼說你還不能理解,那就換種方式。Java的反射就是指在程式運行時能夠擷取自身的資訊,在Java中只要給定類的名字,那麼就可以通過反射機制來擷取類的所有資訊。想想我們在OA時運用的反射機制因為不確定傳進來是哪個實體,是Role還是Apartment還是User,就利用Java的反射機制Class<T>,仔細回憶一下當時的情景。就是我們有三張表,Role、Apartment和User,每個表都有增刪改查四個操作,我們之前不懂Java反射機制的時候,可能就得根據不同的表建立不同的Dao類,像我們上面,就得建立三個Dao類,裡面大量重複相同的方法,只是類名不一樣。

    現在有了Java的反射機制,我們就得從原來的的老圈子裡跳出來。想想人類真是聰明,開發出工具也就算了,還想著不斷改進怎麼能複用性高、效率高。所以我們現在用Java的反射機制,只建立一個Dao類,然後把增刪改查的方法寫進去,但是把類型空出來,到時候只要傳入不同類型的對象就可以操作了,無需有多少表就建立多少個Dao類,反射機制會自動幫我們做這件事。就好比有個酒窖有三個酒缸,分別裝著藍酒、綠酒和黃酒,酒窖老闆每天在門口擺一種酒缸放在門口賣酒。以前的做法就是:比如今天賣藍酒,就搬著裝藍酒的酒缸放在門口;買綠酒就搬著綠酒的酒缸到門口。後來一個夥計想了一個辦法,就是在門口放一個空酒缸,安一個龍頭在酒缸上,今天想賣什麼酒直接往門口的酒缸裡面注就行了,這樣就不用來回搬著酒缸了。呵呵,多麼笨的老闆,當然這個故事是我杜撰的,目的只是想講明白Java的反射機制.


    所以回過頭來說,Java的反射機制可以實現動態建立對象和編譯,為了更好的理解,我們再來杜撰一個例子。現在我是一個班主任,我以前是這麼分配工作的,小紅負責掃地;小藍負責擦玻璃;小黑負責擦黑板;小黃負責倒垃圾,每個人只負責自己的工作,我看到地沒掃,就得記著安排小紅去掃地......


    但是這樣分配工作效率很低,因為我每每想著要安排一個工作,就得想著安排哪個固定的人員去做這件事。所以有了Java反射機制之後,我更改了以往的安排工作的方式。



    這樣一來,利用Java的反射機制,你也不知道你要new哪個對象去做什麼工作,原來直接建立對象去執行相應的工作,現在利用Java的反射機制,在程式啟動並執行過程中,動態建立對象然後去調用它的任意一個方法和屬性去執行其職能。不知道這樣講你對Java的反射機制明白了沒有?下篇文章我會介紹通過Java的反射機制讀取Jar包的類名和屬性,敬請期待吧!

 

【動態網頁面】(二)Java反射

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.