Java反射

一、什麼是反射機制 
        簡單的來說,反射機制指的是程序在運行時能夠獲取自身的信息。在java中,只要給定類的名字, 
    那麼就可以通過反射機制來獲得類的所有信息。 

反射的概念:在java中,反射機制是指在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法;這種動態獲取信息以及動態調用對象方法的功能稱爲JAVA的反射機制。
二、哪裏用到反射機制 
        我們用過一些知識,但是並不知道它的專業術語是什麼,在剛剛學jdbc時用過一行代碼, Class.forName("com.mysql.jdbc.Driver.class").newInstance();但是那時候只知道那行代碼是生成 驅動對象實例,並不知道它的具體含義。現在很多開源框架都用到反射機制,hibernate、struts都是用反射機制實現的。 
三、反射機制的優點與缺點 
        爲什麼要用反射機制?直接創建對象不就可以了嗎,這就涉及到了動態與靜態的概念, 
    靜態編譯:在編譯時確定類型,綁定對象,即通過。 
    動態編譯:運行時確定類型,綁定對象。動態編譯最大限度發揮了java的靈活性,體現了多態的應用,有以降低類之間的藕合性。 
    反射機制的優點就是可以實現動態創建對象和編譯,體現出很大的靈活性,特別是在J2EE的開發中, 它的靈活性就表現的十分明顯。比如,一個大型的軟件,不可能一次就把把它設計的很完美,當這個程序編 譯後,發佈了,當發現需要更新某些功能時,我們不可能要用戶把以前的卸載,再重新安裝新的版本,假如這樣的話,這個軟件肯定是沒有多少人用的。採用靜態的話,需要把整個程序重新編譯一次纔可以實現功能 的更新,而採用反射機制的話,它就可以不用卸載,只需要在運行時才動態的創建和編譯,就可以實現該功 能。 
       它的缺點是對性能有影響。使用反射基本上是一種解釋操作,我們可以告訴JVM,我們希望做什麼並且它 滿足我們的要求。這類操作總是慢於只直接執行相同的操作。 
四、利用反射機制能獲得什麼信息 
         類中有什麼信息,它就可以獲得什麼信息,不過前提是得知道類的名字,要不就沒有後文了 
    首先得根據傳入的類的全名來創建Class對象。 
    Class c=Class.forName("className");註明:className必須爲全名,也就是得包含包名,比如,cn.netjava.pojo.UserInfo; 
    Object obj=c.newInstance();//創建對象的實例 
    有了對象,想要什麼信息就有什麼信息了。   
    獲得構造函數的方法 
    Constructor getConstructor(Class[] params)//根據指定參數獲得public構造器

    Constructor[] getConstructors()//獲得public的所有構造器

    Constructor getDeclaredConstructor(Class[] params)//根據指定參數獲得public和非public的構造器

    Constructor[] getDeclaredConstructors()//獲得public的所有構造器 
    獲得類方法的方法 
    Method getMethod(String name, Class[] params),根據方法名,參數類型獲得方法

    Method[] getMethods()//獲得所有的public方法

    Method getDeclaredMethod(String name, Class[] params)//根據方法名和參數類型,獲得public和非public的方法

    Method[] getDeclaredMethods()//獲得所以的public和非public方法 
    獲得類中屬性的方法 
    Field getField(String name)//根據變量名得到相應的public變量

    Field[] getFields()//獲得類中所以public的方法

    Field getDeclaredField(String name)//根據方法名獲得public和非public變量

    Field[] getDeclaredFields()//獲得類中所有的public和非public方法 
    常用的就這些,知道這些,其他的都好辦…… 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章