黑馬程式員-Java反射機制

來源:互聯網
上載者:User

---------------------- android培訓、java培訓、期待與您交流! ----------------------

學習到了反射的知識,我不由的感慨,反射是在是太強大了,
首先我們必須瞭解什麼是java的反射機制,反射機制就是在運行狀態中,對於任意的一個類,都能夠知道這個類的所有屬性和方法,這種動態擷取資訊的方法的功能稱為java語言的反射機制,也可以認為反射就是把java類中的各種成分映射成java類,就是java中每個類,方法,屬性都有對應的類,都是該類的執行個體對象。
現在來看一個例子

class A{private String name;public A(String name){This.name = name ;}public void setName(String name){this.name = name;}public String getName(){return name;}}

現在我們想要調用類A中的方法,可以這樣

A a = new A(“welen”);a.setName("welenwho");System.out.println(a.getName());

這是平常使用的靜態擷取的方法
下面看一下反射機制下動態擷取的方法

Constructor c = Class.forName("A").getConstructor(String.class);A p = (A)c.newInstance(“welen”);Method m = Class.forName("A").getMethod("setName", String.class);m.invoke(p, "welenwho");Method ms = Class.forName("A").getMethod("getName");System.out.println(ms.invoke(p));

或許現在你還看不出反射機制動態擷取的特別,而且代碼有多又複雜,為什麼要使用反射呢?那麼我們可以來看一個有趣的例子
首先定義一個泛型集合

ArrayList<Integer> list = new ArrayList<Integer>();

這時,你想要若想要這麼做
List.add(“welen”);
那是不可能的,泛型已經把list集合的元素鎖定為integer類型中,任何非integer的類型想要到list集合中都是非法的,編譯器首先就要報錯,那麼,我就是要將一個字串類型的資料載入到list集合中是不是就是不可能的?答案是否定的,因為我們知道,編譯器在將源檔案編譯成class檔案的時候,泛型確定的資料類型就會被丟棄,所有,我們可以越過編譯期,在運行期的時候才載入字串類型的資料到list集合中,那樣泛型的鎖定也就不存在了,反射就可以很容易的實現這個功能:

Method m = Class.forName("java.util.ArrayList").getMethod("add", Object.class);m.invoke(list, "welen");System.out.println(list.get(0));

這樣,我們就可以越過泛型的限制(這個時候不要想那麼還要泛型有什麼用啊,這個只是舉例,特殊情況特殊處理,呵呵),那麼現在知道反射的作用了嗎,其中一個作用就是讓一個類執行個體化和方法的實現跳過編譯期而在運行期才實現,這樣做的好處就是程式的靈活性得到提高。

---------------------- android培訓、java培訓、期待與您交流! ----------------------
詳細請查看:edu.csdn.net/heima

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.