大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 Java學(xué)習(xí) 2020年面試經(jīng)常問到的Java反射面試題

2020年面試經(jīng)常問到的Java反射面試題

更新時(shí)間:2020-07-01 15:59:45 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽5334次


一、反射是什么?


反射的概念是由Smith在1982年首次提出的,主要是指程序可以訪問、檢測(cè)和修改它本身狀態(tài)或行為的一種能力。


通俗地講,一提到反射,我們就可以想到鏡子。鏡子可以明明白白地照出我是誰(shuí),還可以照出別人是誰(shuí)。反映到程序中,反射就是用來(lái)讓開發(fā)者知道這個(gè)類中有什么成員,以及別的類中有什么成員。


二、為什么要有反射


有的同學(xué)可能會(huì)疑惑,Java已經(jīng)有了封裝為什么還要有反射呢?反射看起來(lái)像是破壞了封裝性。甚至讓私有變量都可以被外部訪問到,使得類變得不那么安全了。


我們來(lái)看一下Oracle官方文檔中對(duì)反射的描述:


Uses of Reflection


Reflection is commonly used by programs which require the ability to examine or modify the runtime behavior of applications running in the Java virtual machine.This is a relatively advanced feature and should be used only by developers who have a strong grasp of the fundamentals of the language.With that caveat in mind,reflection is a powerful technique and can enable applications to perform operations which would otherwise be impossible.


Extensibility Features


An application may make use of external,user-defined classes by creating instances of extensibility objects using their fully-qualified names.


Class Browsers and Visual Development Environments


A class browser needs to be able to enumerate the members of classes.Visual development environments can benefit from making use of type information available in reflection to aid the developer in writing correct code.


Debuggers and Test Tools


Debuggers need to be able to examine private members on classes.Test harnesses can make use of reflection to systematically call a discoverable set APIs defined on a class,to insure a high level of code coverage in a test suite.


從Oracle官方文檔中可以看出,反射主要應(yīng)用在以下幾方面:


反射讓開發(fā)人員可以通過外部類的全路徑名創(chuàng)建對(duì)象,并使用這些類,實(shí)現(xiàn)一些擴(kuò)展的功能。


反射讓開發(fā)人員可以枚舉出類的全部成員,包括構(gòu)造函數(shù)、屬性、方法。以幫助開發(fā)者寫出正確的代碼。


測(cè)試時(shí)可以利用反射API訪問類的私有成員,以保證測(cè)試代碼覆蓋率。


也就是說(shuō),Oracle希望開發(fā)者將反射作為一個(gè)工具,用來(lái)幫助程序員實(shí)現(xiàn)本不可能實(shí)現(xiàn)的功能(perform operations which would otherwise be impossible)。正如《人月神話》一書中所言:軟件工程沒有銀彈。很多程序架構(gòu),尤其是三方框架,無(wú)法保證自己的封裝是完美的。如果沒有反射,對(duì)于外部類的私有成員,我們將一籌莫展,所以我們有了反射這一后門,為程序設(shè)計(jì)提供了更大的靈活性。工具本身并沒有錯(cuò),關(guān)鍵在于如何正確地使用。


三、反射API


Java類的成員包括以下三類:屬性字段、構(gòu)造函數(shù)、方法。反射的API也是與這幾個(gè)成員相關(guān):


2020年面試經(jīng)常問到的Java反射面試題


Field類:提供有關(guān)類的屬性信息,以及對(duì)它的動(dòng)態(tài)訪問權(quán)限。它是一個(gè)封裝反射類的屬性的類。


Constructor類:提供有關(guān)類的構(gòu)造方法的信息,以及對(duì)它的動(dòng)態(tài)訪問權(quán)限。它是一個(gè)封裝反射類的構(gòu)造方法的類。


Method類:提供關(guān)于類的方法的信息,包括抽象方法。它是用來(lái)封裝反射類方法的一個(gè)類。


Class類:表示正在運(yùn)行的Java應(yīng)用程序中的類的實(shí)例。


Object類:Object是所有Java類的父類。所有對(duì)象都默認(rèn)實(shí)現(xiàn)了Object類的方法。


接下來(lái),我們通過一個(gè)典型的例子來(lái)學(xué)習(xí)反射。


先做準(zhǔn)備工作,新建com.test.reflection包,在此包中新建一個(gè)Student類:

2020年面試經(jīng)常問到的Java反射面試題


可以看到,Student 類中有兩個(gè) 字段、兩個(gè) 構(gòu)造方法、兩個(gè) 函數(shù),且都是一個(gè)私有,一個(gè)公有。由此可知,這個(gè)測(cè)試類基本涵蓋了我們平時(shí)常用的所有類成員。


以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“2020年面試經(jīng)常問到的Java反射面試題”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。


提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-04-24 搶座中
  • 全國(guó)校區(qū) 2025-05-15 搶座中
  • 全國(guó)校區(qū) 2025-06-05 搶座中
  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 日本-区二区三区免费精品 日本热久久 | 欧美日韩1区 | 亚洲欧美日韩国产精品一区 | 日韩 亚洲 欧美 中文 高清 | 成人不卡 | 午夜色网| 黄色毛片一级 | 人人舔人人插 | 在线观看日本人免费视频色 | 亚洲精品乱码国产精品乱码 | 亚洲国产精品xo在线观看 | 久久精品久久精品国产大片 | 国产精品香蕉在线一区二区 | 天天射天天干天天操 | 手机在线看片国产日韩生活片 | 狠狠澡夜夜澡人人爽 | 亚洲精品综合一区二区三区 | 久青草国产手机在线视频 | 91福利一区二区在线观看 | 亚洲一欧洲中文字幕在线 | 欧美一级黄色片在线观看 | 亚洲欧洲视频在线 | 久久精品全国免费观看国产 | 91精品成人福利在线播放 | 亚洲精品国产啊女成拍色拍 | 国产亚洲精品自在久久77 | 看全色黄大色大片免费视频 | 国内精品七七久久影院 | 久久久久中文 | 精品久久久久久婷婷 | 一级毛片高清 | 亚洲免费播放 | www.婷婷| 欧美日本激情 | 99热这里只有精品2 99热这里只有精品3 | 久国产精品视频 | 亚洲午夜一区 | 欧美高清在线视频在线99精品 | 一级毛片看一个 | 亚洲免费一区二区 | 97夜夜澡人人爽人人免费 |