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

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

Java培訓(xùn)教程:Java中的反射教程

更新時(shí)間:2019-12-17 16:35:24 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2568次

 

Java培訓(xùn)教程:Java中的反射教程

 

  反射是什么?

  Reflection的意思是“反射、映象、倒影”,用在Java身上指的是我們可以于運(yùn)行時(shí)加載、探知、使用編譯期間完全未知的classes。換句話說(shuō),Java程序可以加載一個(gè)運(yùn)行時(shí)才得知名稱的class,獲悉其完整構(gòu)造(但不包括methods定義),并生成其對(duì)象實(shí)體、或?qū)ζ鋐ields設(shè)值、或喚起其methods。

  Java反射機(jī)制是在運(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ī)制。

  為什么需要反射?

  Java反射在框架開發(fā)中尤為重要。有些情況下,我們要使用的類在運(yùn)行時(shí)才會(huì)確定,這個(gè)時(shí)候我們不能在編譯期就使用它,因此只能通過(guò)反射的形式來(lái)使用在運(yùn)行時(shí)才存在的類(該類符合某種特定的規(guī)范,例如JDBC),這是反射用得比較多的場(chǎng)景。

  編譯時(shí)我們對(duì)于類的內(nèi)部信息不可知,必須得到運(yùn)行時(shí)才能獲取類的具體信息。比如ORM框架,在運(yùn)行時(shí)才能夠獲取類中的各個(gè)屬性,然后通過(guò)反射的形式獲取其屬性名和值,存入數(shù)據(jù)庫(kù)。

  反射機(jī)制提供的功能:

  在運(yùn)行時(shí)判斷任意一個(gè)對(duì)象所屬的類; 在運(yùn)行時(shí)構(gòu)造任意一個(gè)類的對(duì)象; 在運(yùn)行時(shí)判斷任意一個(gè)類所具有的成員變量和方法; 在運(yùn)行時(shí)調(diào)用任意一個(gè)對(duì)象的方法。通過(guò)反射甚至可以調(diào)用到private的方法; 在運(yùn)行時(shí)修改構(gòu)造函數(shù),變量和方法的訪問(wèn)權(quán)限。

  解耦

  假如我們有兩個(gè)程序員,一個(gè)程序員在寫程序的時(shí)候,需要使用第二個(gè)程序員所寫的類,但第二個(gè)程序員并沒(méi)完成他所寫的類。那么第一個(gè)程序員的代碼能否通過(guò)編譯呢?這是不能通過(guò)編譯的。利用Java反射的機(jī)制,就可以讓第一個(gè)程序員在沒(méi)有得到第二個(gè)程序員所寫的類的時(shí)候,來(lái)完成自身代碼的編譯

  在對(duì)類的調(diào)用和實(shí)例化的時(shí)候,通過(guò)在配置文件中配置相應(yīng)的類名,在程序中讀取類名,然后通過(guò)反射技術(shù)在程序中加載和實(shí)例化,如常見的數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序類,為了達(dá)到不依賴特定數(shù)據(jù)庫(kù)驅(qū)動(dòng)類,將用到的數(shù)據(jù)庫(kù)驅(qū)動(dòng)類名放到配置文件中(常用的有XML文件、Properties文件和文本文件),然后在程序中加載驅(qū)動(dòng),來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的解耦,也就是說(shuō)只要修改配置文件,就可以方便地更改數(shù)據(jù)庫(kù)類型。

  例如, Spring使用如下的bean配置:

      image.png

  當(dāng)Spring在處理時(shí),會(huì)使用Class.forName(String),同時(shí)參數(shù)為"com.xxx.Foo"用于實(shí)例化這個(gè)Class。同時(shí),使用反射設(shè)置去用于設(shè)置特定的值。

  這種機(jī)制同樣也用于Servlet的web應(yīng)用:   image.png

  反射API

  Java反射相關(guān)類

  Java反射所需要的類并不多,主要有java.lang.Class類java.lang.reflect包中的Field、Constructor、Method、Array類,簡(jiǎn)單說(shuō)明如下所示:

  Class類:Class類的實(shí)例表示正在運(yùn)行的Java應(yīng)用程序中的類和接口。Field類:提供有關(guān)類或接口的屬性的信息,以及對(duì)它的動(dòng)態(tài)訪問(wèn)權(quán)限。反射的字段可能是一個(gè)類屬性或?qū)嵗龑傩?,?jiǎn)單的理解可以把它看成一個(gè)封裝反射類的屬性的類。Constructor類:提供關(guān)于類的單個(gè)構(gòu)造方法的信息以及對(duì)它的訪問(wèn)權(quán)限。這個(gè)類和Field類不同,F(xiàn)ield類封裝了反射類的屬性,而Constructor類則封裝了反射類的構(gòu)造方法。Method類:提供關(guān)于類或接口上單獨(dú)某個(gè)方法的信息。所反映的方法可能是類方法或?qū)嵗椒?包括抽象方法)。這個(gè)類不難理解,它是用來(lái)封裝反射類方法的一個(gè)類。Array類:提供了動(dòng)態(tài)創(chuàng)建數(shù)組和訪問(wèn)數(shù)組的靜態(tài)方法。該類中的所有方法都是靜態(tài)方法。

  Class

  類是程序的一部分,每個(gè)類都有一個(gè)Class對(duì)象。換言之,每當(dāng)編寫并且編譯了一個(gè)新類,就會(huì)產(chǎn)生一個(gè)Class對(duì)象。

  Class沒(méi)有公共構(gòu)造方法。Class對(duì)象是在加載類時(shí)由Java虛擬機(jī)以及通過(guò)調(diào)用類加載器中的defineClass方法自動(dòng)構(gòu)造的,因此不能顯式地聲明一個(gè)Class對(duì)象

  Class是Reflection的起源。要想操縱;類的屬性和方法,都必須從獲取ClassObject開始。

  Class的方法

  getName():獲得類的完整名字。getFields():獲得類的public類型的屬性。getDeclaredFields():獲得類的所有屬性。getMethods():獲得類的public類型的方法。getDeclaredMethods():獲得類的所有方法。getMethod(Stringname,Class[]parameterTypes):獲得類的特定方法,name參數(shù)指定方法的名字,–parameterTypes參數(shù)指定方法的參數(shù)類型。getConstrutors():獲得類的public類型的構(gòu)造方法。getConstrutor(Class[]parameterTypes):獲得類的特定構(gòu)造方法,parameterTypes參數(shù)指定構(gòu)造方法的參數(shù)類型。newInstance():通過(guò)類的不帶參數(shù)的構(gòu)造方法創(chuàng)建這個(gè)類的一個(gè)對(duì)象。

  Constructor

  獲得類的構(gòu)造方法

  ConstructorgetConstructor(Class[]params)–獲得使用特殊的參數(shù)類型的公共構(gòu)造函數(shù)Constructor[]getConstructors()–獲得類的所有公共構(gòu)造函數(shù)ConstructorgetDeclaredConstructor(Class[]params)–獲得使用特定參數(shù)類型的構(gòu)造函數(shù)(與接入級(jí)別無(wú)關(guān))Constructor[]getDeclaredConstructors()–獲得類的所有構(gòu)造函數(shù)(與接入級(jí)別無(wú)關(guān))

  Field

  獲取類定義變量

  FieldgetField(Stringname)–獲得命名的公共字段Field[]getFields()–獲得類的所有公共字段FieldgetDeclaredField(Stringname)–獲得類聲明的命名的字段Field[]getDeclaredFields()–獲得類聲明的所有字段

  Method

  獲取類定義方法

  MethodgetMethod(Stringname,Class[]params)–使用特定的參數(shù)類型,獲得命名的公共方法Method[]getMethods()–獲得類的所有公共方法MethodgetDeclaredMethod(Stringname,Class[]params)–使用特寫的參數(shù)類型,獲得類聲明的命名的方法Method[]getDeclaredMethods()–獲得類聲明的所有方法

 

Java培訓(xùn)教程:Java中的反射教程

       以上就是動(dòng)力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)小編介紹的“Java培訓(xùn)教程:Java中的反射教程”的內(nèi)容,希望對(duì)大家有幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。

 

       Java全套自學(xué)資料

       Java自學(xué)視頻教程(免費(fèi)下載學(xué)習(xí)):http://www.dabaquan.cn/video.html

  Java技術(shù)教程:http://www.dabaquan.cn/tutorial/

  Spring視頻教程(免費(fèi)下載學(xué)習(xí)):http://www.dabaquan.cn/v38/

 

       相關(guān)文章

  零基礎(chǔ)怎么自學(xué)Java,完整版Java學(xué)習(xí)路線圖

  你還在糾結(jié)學(xué)Java,是自學(xué)還是去培訓(xùn)班嗎

  一個(gè)標(biāo)準(zhǔn)的Java程序員如何進(jìn)階?

  Java學(xué)習(xí)路線清單,快速進(jìn)階Java

  Java編程初學(xué)者要如何進(jìn)階

 

提交申請(qǐng)后,顧問(wèn)老師會(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ù)文檔推薦 >>
主站蜘蛛池模板: 91中文字幕在线播放 | 七七七久久久久人综合 | 日本精品久久久久中文字幕2 | 欧美日韩国产人成在线观看 | 成人欧美一区二区三区视频不卡 | 国产高清自拍一区 | 日本精品久久久久久久 | 精品四虎 | 久久精品视频久久 | 性欧美另类老妇高清 | 免费xxxx美国18| 中文字幕久久久久久精 | 亚洲精品天堂 | 久久国产三级 | 日韩性大片免费 | 夜夜操操操 | 劲爆欧美色欧美 | 四虎永久免费地ww4hu57 | 精品国产综合成人亚洲区 | 久久综合丁香 | 日日干日日摸 | 福利影院在线播放 | 香蕉色综合 | 爱爱永久免费视频网站 | 婷婷亚洲综合五月天在线 | 老妇毛片久久久久久久久 | 欧美一二区视频 | 最新久久精品 | 欧美性猛交xxx嘿人猛交 | 美国成人a免费毛片 | aaa毛片在线| 欧美刺激午夜性久久久久久久 | 久久成年视频 | 99超级碰碰成人香蕉网 | 九九全国免费视频 | 99久久精彩视频 | 亚洲精品在线观看91 | 狠狠色婷婷丁香综合久久韩国 | 久久我们这里只有精品国产4 | 中文字幕日本不卡一二三区 | 在线日韩麻豆一区 |