午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

【Java面試題第七期】一文回答面試中常見(jiàn)反射問(wèn)題?

 IT樂(lè)知 2021-03-12

11

java反射的作用

反射機(jī)制是在運(yùn)行時(shí),對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法。在java中,只要給定類的名字,就可以通過(guò)反射機(jī)制來(lái)獲得類的所有信息。

1)在運(yùn)行時(shí)判斷任意一個(gè)對(duì)象所屬的類。

2)在運(yùn)行時(shí)構(gòu)造任意一個(gè)類的對(duì)象。

3)在運(yùn)行時(shí)判斷任意一個(gè)類所具有的成員變量和方法。

4)在運(yùn)行時(shí)調(diào)用任意一個(gè)對(duì)象的方法。

實(shí)現(xiàn)Java反射的類

1)Class:表示正在運(yùn)行的Java應(yīng)用程序中的類和接口。

注意: 所有獲取對(duì)象的信息都需要Class類來(lái)實(shí)現(xiàn)。

2)Field:提供有關(guān)類和接口的屬性信息,以及對(duì)它的動(dòng)態(tài)訪問(wèn)權(quán)限。

3)Constructor:提供關(guān)于類的單個(gè)構(gòu)造方法的信息以及它的訪問(wèn)權(quán)限。

4)Method:提供類或接口中某個(gè)方法的信息。

java反射機(jī)制

可以在運(yùn)行時(shí)判斷?個(gè)對(duì)象所屬的類,構(gòu)造?個(gè)類的對(duì)象,判斷類具有的成員變量和方法,調(diào)用1個(gè)對(duì)象的方法。

4個(gè)關(guān)鍵的類:Class,Constructor,F(xiàn)ield,Method。 getConstructor獲得構(gòu)造函數(shù)/getDeclardConstructor;

getField/getFields/getDeclardFields獲得類所生命的所有字段;

getMethod/getMethods/getDeclardMethod獲得類聲明的所有方法,正常方法是?個(gè)類創(chuàng)建對(duì)象,而反射是1個(gè)對(duì)象找到1個(gè)類。

如何通過(guò)反射獲取和設(shè)置對(duì)象私有字段的值?

可以通過(guò)類對(duì)象的 getDeclaredField()方法字段(Field)對(duì)象,然后再通過(guò)字段對(duì)象的 setAccessible(true)將其設(shè)置為可以訪問(wèn),接下來(lái)就可以通過(guò)get/set 方法來(lái)獲取/設(shè)置字段的值了。

如何通過(guò)反射創(chuàng)建對(duì)象?

方法 1:通過(guò)類對(duì)象調(diào)用 newInstance()方法,例如:     String.class.newInstance()

方法 2:通過(guò)類對(duì)象的 getConstructor()或   getDeclaredConstructor()方法獲得構(gòu)造器(Constructor)對(duì)象并調(diào)用其newInstance()方法創(chuàng)建對(duì)象,例如:String.class.getConstructor(String.class).newInstance(“Hello”);

反射機(jī)制的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

1)能夠運(yùn)行時(shí)動(dòng)態(tài)獲取類的實(shí)例,提高靈活性;

2)與動(dòng)態(tài)編譯結(jié)合;

缺點(diǎn):

1)使用反射性能較低,需要解析字節(jié)碼,將內(nèi)存中的對(duì)象進(jìn)行解析。

解決方案:

1、通過(guò)setAccessible(true)關(guān)閉JDK的安全檢查來(lái)提升反射速度;

2、多次創(chuàng)建一個(gè)類的實(shí)例時(shí),有緩存會(huì)快很多;

3、ReflflectASM工具類,通過(guò)字節(jié)碼生成的方式加快反射速度;

反射機(jī)制的應(yīng)用場(chǎng)景有哪些?

反射是框架設(shè)計(jì)的靈魂。

在我們平時(shí)的項(xiàng)目開發(fā)過(guò)程中,基本上很少會(huì)直接使用到反射機(jī)制,但這不能說(shuō)明反射機(jī)制沒(méi)有用,實(shí)際上有很多設(shè)計(jì)、開發(fā)都與反射機(jī)制有關(guān),例如模塊化的開發(fā),通過(guò)反射去調(diào)用對(duì)應(yīng)的字節(jié)碼;動(dòng)態(tài)代理設(shè)計(jì)模式也采用了反射機(jī)制,還有我們?nèi)粘J褂玫?Spring/Hibernate 等框架也大量使用到了反射機(jī)制。

舉例:

①我們?cè)谑褂肑DBC連接數(shù)據(jù)庫(kù)時(shí)使用Class.forName()通過(guò)反射加載數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序;

②Spring框架也用到很多反射機(jī)制,最經(jīng)典的就是xml的配置模式。Spring 通過(guò)XML 配置模式裝載Bean 的過(guò)程:

1) 將程序內(nèi)所有 XML 或 Properties 配置文件加載入內(nèi)存中;

2)Java類里面解析xml或properties里面的內(nèi)容,得到對(duì)應(yīng)實(shí)體類的字節(jié)碼字符串以及相關(guān)的屬性信息;

3)使用反射機(jī)制,根據(jù)這個(gè)字符串獲得某個(gè)類的Class實(shí)例;

4)動(dòng)態(tài)配置實(shí)例的屬性;

小程序:IT面試題練習(xí)

未標(biāo)題-00000000

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多