第12章自檢更靈活java中反射_第1頁
第12章自檢更靈活java中反射_第2頁
第12章自檢更靈活java中反射_第3頁
第12章自檢更靈活java中反射_第4頁
第12章自檢更靈活java中反射_第5頁
已閱讀5頁,還剩12頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

軟件開發魔典從入門到項目實踐項目實踐清華大學出版社(超值版)本課時學習重點學習指引反射指程序可以訪問、檢測和修改它本身狀態或行為的一種能力。反射使程序的代碼能夠得到裝載到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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論