黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java培訓 Java培訓教程:Java中的反射教程

Java培訓教程:Java中的反射教程

更新時間:2019-12-17 16:35:24 來源:動力節點 瀏覽2583次

 

Java培訓教程:Java中的反射教程

 

  反射是什么?

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

  Java反射機制是在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性及方法;對于任何一個對象,都能夠調用它的任意一個方法;這種動態獲取信息以及動態調用對象的方法的功能稱為Java的反射機制。

  為什么需要反射?

  Java反射在框架開發中尤為重要。有些情況下,我們要使用的類在運行時才會確定,這個時候我們不能在編譯期就使用它,因此只能通過反射的形式來使用在運行時才存在的類(該類符合某種特定的規范,例如JDBC),這是反射用得比較多的場景。

  編譯時我們對于類的內部信息不可知,必須得到運行時才能獲取類的具體信息。比如ORM框架,在運行時才能夠獲取類中的各個屬性,然后通過反射的形式獲取其屬性名和值,存入數據庫。

  反射機制提供的功能:

  在運行時判斷任意一個對象所屬的類; 在運行時構造任意一個類的對象; 在運行時判斷任意一個類所具有的成員變量和方法; 在運行時調用任意一個對象的方法。通過反射甚至可以調用到private的方法; 在運行時修改構造函數,變量和方法的訪問權限。

  解耦

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

  在對類的調用和實例化的時候,通過在配置文件中配置相應的類名,在程序中讀取類名,然后通過反射技術在程序中加載和實例化,如常見的數據庫驅動程序類,為了達到不依賴特定數據庫驅動類,將用到的數據庫驅動類名放到配置文件中(常用的有XML文件、Properties文件和文本文件),然后在程序中加載驅動,來實現對數據庫的解耦,也就是說只要修改配置文件,就可以方便地更改數據庫類型。

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

      image.png

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

  這種機制同樣也用于Servlet的web應用:   image.png

  反射API

  Java反射相關類

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

  Class類:Class類的實例表示正在運行的Java應用程序中的類和接口。Field類:提供有關類或接口的屬性的信息,以及對它的動態訪問權限。反射的字段可能是一個類屬性或實例屬性,簡單的理解可以把它看成一個封裝反射類的屬性的類。Constructor類:提供關于類的單個構造方法的信息以及對它的訪問權限。這個類和Field類不同,Field類封裝了反射類的屬性,而Constructor類則封裝了反射類的構造方法。Method類:提供關于類或接口上單獨某個方法的信息。所反映的方法可能是類方法或實例方法(包括抽象方法)。這個類不難理解,它是用來封裝反射類方法的一個類。Array類:提供了動態創建數組和訪問數組的靜態方法。該類中的所有方法都是靜態方法。

  Class

  類是程序的一部分,每個類都有一個Class對象。換言之,每當編寫并且編譯了一個新類,就會產生一個Class對象。

  Class沒有公共構造方法。Class對象是在加載類時由Java虛擬機以及通過調用類加載器中的defineClass方法自動構造的,因此不能顯式地聲明一個Class對象

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

  Class的方法

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

  Constructor

  獲得類的構造方法

  ConstructorgetConstructor(Class[]params)–獲得使用特殊的參數類型的公共構造函數Constructor[]getConstructors()–獲得類的所有公共構造函數ConstructorgetDeclaredConstructor(Class[]params)–獲得使用特定參數類型的構造函數(與接入級別無關)Constructor[]getDeclaredConstructors()–獲得類的所有構造函數(與接入級別無關)

  Field

  獲取類定義變量

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

  Method

  獲取類定義方法

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

 

Java培訓教程:Java中的反射教程

       以上就是動力節點Java培訓機構小編介紹的“Java培訓教程:Java中的反射教程”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。

 

       Java全套自學資料

       Java自學視頻教程(免費下載學習):http://www.ilovecolors.com.cn/video.html

  Java技術教程:http://www.ilovecolors.com.cn/tutorial/

  Spring視頻教程(免費下載學習):http://www.ilovecolors.com.cn/v38/

 

       相關文章

  零基礎怎么自學Java,完整版Java學習路線圖

  你還在糾結學Java,是自學還是去培訓班嗎

  一個標準的Java程序員如何進階?

  Java學習路線清單,快速進階Java

  Java編程初學者要如何進階

 

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 日韩伦理影视 | 日韩精品久久久免费观看夜色 | 欧美国产综合 | 成人精品在线观看 | 亚洲国产成人资源在线软件 | 欧美福利影院 | 国产丶欧美丶日韩丶不卡影视 | 人人公开免费超级碰碰碰视频 | 天天拍天天操 | 国产亚洲人成网站在线观看不卡 | 国产黄色高清视频 | 国产片黄色 | 香蕉网站视频高清在线观看 | 亚洲一区二区三区免费看 | 久久午夜夜伦伦鲁鲁片 | 综合欧美日韩 | 边做边叫床的大尺度视频免费 | 欧美性天天影院欧美狂野 | 日本免费全黄一级裸片视频 | 免费一级欧美大片在线观看 | 躁天天躁中文字幕在线 | 老湿影院福利社 | 午夜激情福利在线 | 国产a国产 | se成人| 日韩一区二区不卡 | 粉色视频导航 | 丝袜美女足淫美足美脚网站 | 日韩性公交车上xxhd免费 | 日韩三级小视频 | 一级片一级毛片 | 国产激情久久久久影 | 国产免费好大好硬视频 | 午夜精品一区 | 在线观看国产亚洲 | 成人一级免费视频 | 成视频年人黄网站免费视频 | 成年视频在线观看免费 | 国产精品视频ccav | 农村女人偷人一级大毛片 | 亚洲成在人色婷婷 |