序言
在學(xué)習(xí)java基礎(chǔ)時(shí),由于學(xué)的不扎實(shí),講的實(shí)用性不強(qiáng),就覺得沒用,很多重要的知識(shí)就那樣一筆帶過了,像這個(gè)馬上要講的反射機(jī)制一樣,當(dāng)時(shí)學(xué)的時(shí)候就忽略了,到后來學(xué)習(xí)的知識(shí)中,很多東西動(dòng)不動(dòng)就用反射,所以回過頭來把這個(gè)給重新補(bǔ)一下,自己欠下的債,遲早是要還的。
---WH
一、什么是反射?
在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠獲取到這個(gè)類的所有屬性和方法,對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法和屬性(包括私有的方法和屬性),這種動(dòng)態(tài)獲取的信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能就稱為java語言的反射機(jī)制。通俗點(diǎn)講,通過反射,該類對(duì)我們來說是完全透明的,想要獲取任何東西都可以。
想要使用反射機(jī)制,就必須要先獲取到該類的字節(jié)碼文件對(duì)象(.class),通過字節(jié)碼文件對(duì)象,就能夠通過該類中的方法獲取到我們想要的所有信息(方法,屬性,類名,父類名,實(shí)現(xiàn)的所有接口等等),每一個(gè)類對(duì)應(yīng)著一個(gè)字節(jié)碼文件也就對(duì)應(yīng)著一個(gè)Class類型的對(duì)象,也就是字節(jié)碼文件對(duì)象。
獲取字節(jié)碼文件對(duì)象的三種方式。
1、Class clazz1 = Class.forName("全限定類名"); //通過Class類中的靜態(tài)方法forName,直接獲取到一個(gè)類的字節(jié)碼文件對(duì)象,此時(shí)該類還是