Java反射機(jī)制的精髓講解
1,什么是反射?
java的反射,允許程序在運(yùn)行時(shí),創(chuàng)建一個(gè)對(duì)象,獲取一個(gè)類的所有相關(guān)信息等。
2,Class類
要了解反射,就繞不開Class類。
我們平時(shí)開發(fā)的類,例如ClassA,一般會(huì)有一些屬性,會(huì)有幾個(gè)構(gòu)造方法,也會(huì)有一些普通方法,我們還可以使用ClassA來創(chuàng)建對(duì)象,例如ClassA classA = new ClassA()。
java程序在運(yùn)行時(shí),其實(shí)是很多類的很多個(gè)對(duì)象之間的協(xié)作。jvm如何管理這些類呢?它如何知道各個(gè)類的名稱,每個(gè)類都有哪些屬性和哪些方法呢?
jvm會(huì)給每個(gè)類,創(chuàng)建一個(gè)Class類型的對(duì)象,來記錄各個(gè)類的信息,包括類的名稱,類有哪些屬性,各個(gè)屬性的類型,類有哪些方法,各個(gè)方法的名稱參數(shù)列表返回值等。我們可以說ClassA是所有ClassA類型的對(duì)象的類,同理,我們也可以說,Class是所有Class類型對(duì)象的類,而Class類型的對(duì)象,也就是其他的所有的類。
3,可以獲取類的哪些信息呢?
可以獲取類的名稱,類的構(gòu)造函數(shù),類的屬性,類的普通方法等。
4,如何使用獲取到的類的信息呢?
首先看一下如何使用獲取到的類的方法。
jvm提供了Method類,來表示類的方法,我們獲取到的一個(gè)類的方法,其實(shí)就是Method的對(duì)象。
從Class獲取方法的方式為,調(diào)用getMethod()方法,第一個(gè)參數(shù)為方法名稱,后面是待獲取的方法的參數(shù)的類型列表。
而調(diào)用獲取到的方法時(shí),也比較特殊,是調(diào)用Method的invoke方法,第一個(gè)參數(shù)為調(diào)用哪個(gè)對(duì)象的該方法,后面是需要給該方法傳遞的參數(shù)列表。
Object obj = MyClass.class.newInstance();
Method method = MyClass.class.getMethod("methodName", String.class, String.class);
method.invoke(obj, "a", "b");
jvm提供了Constructor來表示類的構(gòu)造方法,提供了Field來表示類的屬性,其使用方法與Method的類似。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
Java實(shí)現(xiàn)的Windows資源管理器實(shí)例
這篇文章主要介紹了Java實(shí)現(xiàn)的Windows資源管理器,實(shí)例分析了基于java實(shí)現(xiàn)windows資源管理器的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
springboot使用Mybatis(xml和注解)過程全解析
這篇文章主要介紹了springboot使用Mybatis(xml和注解)過程全解析 ,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05
MyBatis 動(dòng)態(tài)拼接Sql字符串的問題
java虛擬機(jī)jvm方法區(qū)實(shí)例講解
淺析Java常用API(Scanner,Random)匿名對(duì)象
Java 中實(shí)現(xiàn)隨機(jī)無重復(fù)數(shù)字的方法
MyBatis discriminator標(biāo)簽原理實(shí)例解析

