




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
軟件開發魔典從入門到項目實踐項目實踐清華大學出版社(超值版)本課時學習重點學習指引反射指程序可以訪問、檢測和修改它本身狀態或行為的一種能力。反射使程序的代碼能夠得到裝載到Java虛擬機中的類的內部信息。本章將詳細介紹Java
的反射機制,主要內容包括java.lang.reflect
包提供的Class
類、Constructor
類、Method
類、Field
類和Array
類等,以及ParameterizedType
接口如何獲取泛型類、泛型方法的信息。重點導讀了解反射概述。掌握Class類如何獲取對象。熟悉Class類的常用方法的使用。熟悉如何利用反射生成對象。掌握封裝反射方法的Method
類。掌握封裝反射屬性的Field
類。掌握利用反射動態創建數組的Array
類。聚慕課教育研發中心
學習、授課與教學PPT課件12.1
反射概述在程序運行過程中,對于任意一個對象,都能夠知道這個對象所在類的所有屬性和方法,都能夠調用它的任意一個方法和訪問它的任意一個屬性,這種動態調用對象的方法及動態獲取信息的功能稱為Java
語言的反射機制。通過Java
的反射機制,程序員可以方便、靈活地創建代碼,這些代碼可以在運行時進行裝配,在程序運行過程中可以動態地擴展程序。Java
的反射機制主要有以下功能:在運行時判斷任意一個對象所屬的類。在運行時構造任意一個類的對象。在運行時判斷任意一個類所具有的成員變量和方法。在運行時調用任意一個對象的方法。生成動態代理。聚慕課教育研究中心學習、授課與教學PPT課件12.2
反射類Java
提供的反射所需要的類主要有java.lang.Class
類和java.lang.reflect包中的Field
類、Constructor
類、Method
類和Array
類等。Class
類的實例表示正在運行的Java
應用程序中的類和接口。它是
Java
反射的基礎,對于任何一個類,首先要產生一個Class
的對象,然后才可以通過Class類獲得其他的信息。Field
類提供有關類或接口的單個字段的信息以及對它的動態訪問權限。反射的字段可能是一個類(靜態)字段或實例字段。該類封裝了反射類的屬性。Constructor
類提供關于類的單個構造方法的信息以及對它的訪問權限。該類封裝了反射類的構造方法。Method
類提供關于類或接口上單獨某個方法的信息,該方法可能是類方法或實例方法(包括抽象方法)。該類是用來封裝反射類的方法。Array
類提供了動態創建和訪問Java
數組的方法。它提供的方法都是靜態方法。聚慕課教育研究中心學習、授課與教學PPT課件12.3.1
認識Class
類Class類在包java.lang
中。Class類的定義格式如下:public
final
class
Class<T>extends
Objectimplements
Serializable,
GenericDeclaration,Type,AnnotatedElement聚慕課教育研究中心學習、授課與教學PPT課件12.3.2
獲取Class
類對象在Java
語言中,獲取Class
類對象的方式有3
種,具體如下。(
1)通過Object
類提供的getClass()方法獲得Class
類對象。這是獲取Class類對象最常見的一種方式,具體格式如下:Object
obj=new
Object();//創建Object
類對象Classc1=obj.getClass();//調用Object
類的getClass()方法獲取Class類對象聚慕課教育研究中心學習、授課與教學PPT課件12.3.3
Class
類常用方法Class
類提供了大量的方法,用來獲取所標識的實體的信息。這些實體可以是類、接口、數組、枚舉、注解、基本類型或void類型等。【例12-1】(實例文件:ch12\Chap12.1.txt)
Class
類的常用方法。聚慕課教育研究中心學習、授課與教學PPT課件12.4.1
無參構造方法在Java
程序中,通常使用new
關鍵字調用類的構造方法來創建對象。但是,對于一些特殊情況,例如程序只有在運行時才知道要創建對象的類名,就需要使用Java
的反射機制來創建對象。使用Java
的反射機制創建對象有兩種方法,即無參構造方法和有參構造方法。若使用無參數的構造方法創建對象,首先要獲得這個類的Class類對象,然后調用Class類對象的newInstance()方法。具體代碼如下:Class
c2=Class.forName("java.lang.Integer");//獲得Class類對象
c2.newInstance();//使用Class
類對象的newInstance()方法生成對象
注意:如果該類或其null
構造方法是不可訪問的,則拋出
IllegalAccessException類型的異常;如果此Class類表示一個抽象類、接口、數組類、基本類型或void
類型的實體,或者該類沒有null
構造方法,或者由于其他某種原因導致實例化失敗,則拋出
InstantiationException
類型的異常。聚慕課教育研究中心學習、授課與教學PPT課件12.4.2
有參構造方法若使用帶參數的構造方法創建對象的具體步驟如下:(
1)獲得指定類的Class
類對象。(
2)通過反射獲取符合指定參數類型的構造方法類(
Constructor
類)對象。(
3)調用Constructor
類對象的newInstance()方法傳入對應參數值,創建對象。【例12-2】(實例文件:ch12\Chap12.2.txt)使用有參構造方法創建對象。聚慕課教育研究中心學習、授課與教學PPT課件12.5
Constructor
類Constructor
類在包java.lang.reflect
中。Constructor
類的定義格式如下:public
final
class
Constructor<T>extendsAccessibleObjectimplements
GenericDeclaration,
MemberConstructor
類的對象可以表示類的構造方法。聚慕課教育研究中心學習、授課與教學PPT課件12.6
Method
類java.lang.reflect
包中的Method
類的實例就是使用Java
的反射機制獲得 的指定類中指定方法的對象代表,Method
類中的invoke()方法可以動態 調用這個方法。invoke()方法的語法格式如下:public
Object
invoke(Object
obj,Object...
args)throws
IllegalAccessException,
IllegalArgumentException,nvocationTargetException【例12-3】(實例文件:ch12\Chap12.3.txt)利用反射類獲取其他類 的域和方法,并實現對象的復制。聚慕課教育研究中心學習、授課與教學PPT課件12.7
Field
類java.lang.reflect
包中Field
類的實例是使用反射獲得的類的成員變量的對 象代表。可以使用Field
類的get
方法獲取指定對象上的值,也可調用它 的set
方法動態修改指定對象上的值。Field
類在包java.lang.reflect中。Field
類的定義格式如下:public
final
class
Field
extends
AccessibleObject
implements
MemberField
類的對象可以表示類或者接口中的一個域,可以是靜態域,也可以是實例域。【例12-4】(實例文件:ch12\Chap12.4.txt)通過反射來動態設置和獲取指定對象的指定成員變量的值。聚慕課教育研究中心學習、授課與教學PPT課件12.8
數組類java.lang.reflect
包中Array
類提供了使用反射動態創建和訪問Java
數組的方法。數組作為一個對象,可以通過反射來查看其各個屬性信息以及類型名。【例12-5】(實例文件:ch12\Chap12.5.txt)利用反射動態創建數組,并獲取屬性信息。聚慕課教育研究中心學習、授課與教學PPT課件12.9
獲取泛型信息java.lang.reflect
包中提供的ParameterizedType
接口可以用來獲取泛型類、泛型方法、泛型接口等的泛型參數信息。ParameterizedType
接口提供的getActualTypeArguments()方法是返回表示此類型實際類型參數的Type
對象的數組。【例12-6】(實例文件:ch12\Chap12.6.txt)使用反射獲取泛型信息。聚慕課教育研究中心學習、授課與教學PPT課件12.10.1
面試解析與技巧(一)面試官:如何使用反射獲取類的私有方法的信息?應聘者:獲取類的私有方法,首先獲取指定類的Class
類對象c;然后利用對象c
調用Class類提供的getMethod()方法,獲取指定的私有方法Method
類的實例m;最后通過m
調用Method
類的setAccessible(true)取消對方法的訪問檢查,對象m
再調用invoke()方法真正執行這個私有方法。聚慕課教育研究中心
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新學期演講稿范文(15篇)
- 《電子票據業務分析與應用》課件
- 全國清華版信息技術小學五年級上冊新授課 第2課 新春快樂 -制作逐幀動畫 教學設計
- 《時尚品牌市場調研》課件
- 五 校園安全電子眼 安全宣傳靠大家(教學設計)粵教版三年級下冊綜合實踐活動
- 深圳培訓課件
- 教師線上培訓個人總結范文(16篇)
- 《小學生個人總結》課件
- 公園綠地施工方案
- 青島路面施工方案
- NBT 47013.2-2015 承壓設備無損檢測 第2部分:射線檢測
- 《大學生美育》 課件 第七章 藝術美
- 2024年巴西獸醫快速診斷市場機會及渠道調研報告
- 2024年云南省中考數學試題含答案
- 網課智慧樹知道《人工智能引論(浙江大學)》章節測試答案
- 場地使用免責協議
- 基于PLC的全自動洗衣機控制系統設計答辯稿課件
- 大數據概論期末試題及答案
- 熱工基礎課后答案超詳細版(張學學)
- 廣東省深圳市深圳高級中學2023-2024學年下學期期中測試八年級數學試題
- 成年身份證號碼大全
評論
0/150
提交評論