成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

第17部分_反射機(jī)制

trilever / 2135人閱讀

摘要:如果此對(duì)象表示非靜態(tài)上下文中聲明的內(nèi)部類,則形參類型作為第一個(gè)參數(shù)包括顯示封閉的實(shí)例。參數(shù)字段名返回此類中指定字段的對(duì)象拋出如果找不到帶有指定名稱的字段。

一、類的加載 1. 概述

當(dāng)程序要使用某個(gè)類時(shí),如果該類還未被加載到內(nèi)存中,則系統(tǒng)會(huì)通過加載,連接,初始化三步來實(shí)現(xiàn)對(duì)這個(gè)類進(jìn)行初始化

2. 加載

就是指將class文件讀入內(nèi)存,并為之創(chuàng)建一個(gè)Class對(duì)象

任何類被使用時(shí)系統(tǒng)都會(huì)建立一個(gè)Class對(duì)象——字節(jié)碼文件對(duì)象

3. 連接

驗(yàn)證——確保被加載類的正確性

準(zhǔn)備——負(fù)責(zé)為類的靜態(tài)成員分配內(nèi)存,并設(shè)置默認(rèn)初始化值,給給對(duì)象分配空間

解析——將類中的符號(hào)引用替換為直接引用

4.初始化

就是以前講過的初始化步驟

5. 類的加載時(shí)機(jī)

創(chuàng)建類的實(shí)例

訪問類的靜態(tài)變量

調(diào)用類的靜態(tài)方法

使用反射方式來強(qiáng)制創(chuàng)建某個(gè)類或接口對(duì)應(yīng)的java.lang.Class對(duì)象

初始化某個(gè)類的子類,子類父類都加載

直接使用java.exe命令來運(yùn)行某個(gè)主類

二、類加載器 1. 概述

負(fù)責(zé)將.class文件加載到內(nèi)存中,并為之生成對(duì)應(yīng)的Class對(duì)象

2. 類加載器的組成

Bootstrap ClassLoader——根類加載器

Extension ClassLoader——擴(kuò)展類加載器

System ClassLoader——系統(tǒng)類加載器

3.Bootstrap ClassLoader的作用

Bootstrap ClassLoader——根類加載器,也被稱為引導(dǎo)類加載器,負(fù)責(zé)Java核心類的加載,比如System,String等。

在JDK中JRE的lib目錄下rt.jar文件中

4.Extension ClassLoader的作用

Extension ClassLoader——擴(kuò)展類加載器,負(fù)責(zé)JRE的擴(kuò)展目錄中jar包的加載。

在JDK中JRE的lib目錄下ext目錄。

5.System ClassLoader的作用

System ClassLoader——系統(tǒng)類加載器,負(fù)責(zé)在JVM啟動(dòng)時(shí)加載來自java命令的class文件。

三、Class類 1. Class類的全稱
public final class Class extends Object 
implements Serializable, GenericDeclaration, Type, AnnotatedElement
2. Class類的概述

Java程序在運(yùn)行時(shí),Java運(yùn)行時(shí)系統(tǒng)一直對(duì)所有的對(duì)象進(jìn)行所謂的運(yùn)行時(shí)類型標(biāo)識(shí)。

這項(xiàng)信息紀(jì)錄了每個(gè)對(duì)象所屬的類。

虛擬機(jī)通常使用運(yùn)行時(shí)類型信息選準(zhǔn)正確方法去執(zhí)行,用來保存這些類型信息的類是Class類。

Class類封裝一個(gè)對(duì)象和接口運(yùn)行時(shí)的狀態(tài),當(dāng)裝載類時(shí),Class類型的對(duì)象自動(dòng)創(chuàng)建。

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

基本的 Java 類型(boolean、byte、char、short、int、long、float 和 double)和關(guān)鍵字 void 也都對(duì)應(yīng)一個(gè) Class 對(duì)象。

每個(gè)數(shù)組屬于被映射為Class對(duì)象的一個(gè)類,所有具有相同元素類型和維數(shù)的數(shù)組都共享該Class對(duì)象。

一般某個(gè)類的Class對(duì)象被載入內(nèi)存,它就用來創(chuàng)建這個(gè)類的所有對(duì)象。

3. Class類的構(gòu)造方法
無公共的構(gòu)造方法
4. Class類的成員方法 4.01 getConstructor(Class... parameterTypes)
方法:
    * public Constructor getConstructor(Class... parameterTypes)
      throws NoSuchMethodException,SecurityException
功能:     
    * 返回一個(gè)Constructor對(duì)象,它反映此Class對(duì)象所表示的類的指定公共構(gòu)造方法。        
    * parameterTypes參數(shù)是Class對(duì)象的一個(gè)數(shù)組,這些Class對(duì)象按聲明順序標(biāo)識(shí)構(gòu)造方法的形參類型。 
    * 如果此Class對(duì)象表示非靜態(tài)上下文中聲明的內(nèi)部類,則形參類型作為第一個(gè)參數(shù)包括顯示封閉的實(shí)例。 
    * 要反映的構(gòu)造方法是此Class對(duì)象所表示的類的公共構(gòu)造方法,其形參類型與parameterTypes所指定的參數(shù)類型相匹配。 
參數(shù):
    * parameterTypes-參數(shù)數(shù)組 
返回:
    * 與指定的parameterTypes相匹配的公共構(gòu)造方法的Constructor對(duì)象 
拋出: 
    * NoSuchMethodException-如果找不到匹配的方法。 
    * SecurityException-如果存在安全管理器s,并滿足下列任一條件: 
        * 調(diào)用s.checkMemberAccess(this, Member.PUBLIC)拒絕訪問構(gòu)造方法 
        * 調(diào)用者的類加載器不同于也不是當(dāng)前類的類加載器的一個(gè)祖先,并且對(duì)s.checkPackageAccess()的調(diào)用拒絕訪問該類的包 
4.02 getConstructors()
方法:
    * public Constructor[] getConstructors() throws SecurityException
功能:
    * 返回一個(gè)包含某些Constructor對(duì)象的數(shù)組,這些對(duì)象反映此Class對(duì)象所表示的類的所有公共構(gòu)造方法。
    * 如果該類沒有公共構(gòu)造方法,或者該類是一個(gè)數(shù)組類,或者該類反映一個(gè)基本類型或void,則返回一個(gè)長(zhǎng)度為0的       數(shù)組。 
    * 此方法返回Constructor對(duì)象的數(shù)組(即取自此類構(gòu)造方法的數(shù)組)時(shí),此方法的返回類型                   Constructor[],不是預(yù)期的Constructor[]。
    * 此少量信息的返回類型是必需的,因?yàn)閺拇朔椒ǚ祷刂?,該?shù)組可能被修改以保存不同類的Constructor對(duì)         象,而這將違反Constructor[]的類型保證。 
返回:
    * 表示此類公共構(gòu)造方法的Constructor對(duì)象數(shù)組 
拋出: 
    * SecurityException-如果存在安全管理器s,并滿足下列任一條件: 
        * 調(diào)用s.checkMemberAccess(this, Member.PUBLIC)拒絕訪問該類中的構(gòu)造方法 
        * 調(diào)用者的類加載器不同于也不是當(dāng)前類的類加載器的一個(gè)祖先,并且對(duì)s.checkPackageAccess()的調(diào)用           拒絕訪問該類的包 
4.03 getDeclaredConstructor(Class... parameterTypes)
方法:
    * public Constructor getDeclaredConstructor(Class... parameterTypes)
      throws NoSuchMethodException,SecurityException
功能:
    * 返回一個(gè)Constructor對(duì)象,該對(duì)象反映此Class對(duì)象所表示的類或接口的指定構(gòu)造方法。
    * parameterTypes參數(shù)是Class對(duì)象的一個(gè)數(shù)組,它按聲明順序標(biāo)識(shí)構(gòu)造方法的形參類型。 
    * 如果此Class對(duì)象表示非靜態(tài)上下文中聲明的內(nèi)部類,則形參類型作為第一個(gè)參數(shù)包括顯示封閉的實(shí)例。 
參數(shù):
    * parameterTypes-參數(shù)數(shù)組 
返回:
    * 帶有指定參數(shù)列表的構(gòu)造方法的Constructor對(duì)象 
拋出: 
    * NoSuchMethodException-如果找不到匹配的方法。 
    * SecurityException-如果存在安全管理器s,并滿足下列任一條件: 
        * 調(diào)用s.checkMemberAccess(this, Member.DECLARED)拒絕訪問已聲明的構(gòu)造方法 
        * 調(diào)用者的類加載器不同于也不是當(dāng)前類的類加載器的一個(gè)祖先,并且對(duì)s.checkPackageAccess()的調(diào)用           拒絕訪問該類的包 
4.04 getDeclaredConstructors()
方法:
    * public Constructor[] getDeclaredConstructors() throws SecurityException
功能:
    * 返回Constructor對(duì)象的一個(gè)數(shù)組,這些對(duì)象反映此Class對(duì)象表示的類聲明的所有構(gòu)造方法。
    * 它們是公共、保護(hù)、默認(rèn)(包)訪問和私有構(gòu)造方法。
    * 返回?cái)?shù)組中的元素沒有排序,也沒有任何特定的順序。
    * 如果該類存在一個(gè)默認(rèn)構(gòu)造方法,則它包含在返回的數(shù)組中。
    * 如果此Class對(duì)象表示一個(gè)接口、一個(gè)基本類型、一個(gè)數(shù)組類或void,則此方法返回一個(gè)長(zhǎng)度為0的數(shù)組。 
返回:
    * 表示此類所有已聲明的構(gòu)造方法的Constructor對(duì)象的數(shù)組 
拋出: 
    * SecurityException-如果存在安全管理器s,并滿足下列任一條件: 
        * 調(diào)用s.checkMemberAccess(this, Member.DECLARED)拒絕訪問該類中已聲明的構(gòu)造方法 
        * 調(diào)用者的類加載器不同于也不是當(dāng)前類的類加載器的一個(gè)祖先,并且對(duì)s.checkPackageAccess()的調(diào)用           拒絕訪問此類的包 
4.05 getField(String name)
方法:
    * public Field getField(String name) throws NoSuchFieldException,SecurityException
功能:
    * 返回一個(gè)Field對(duì)象,它反映此Class對(duì)象所表示的類或接口的指定公共成員字段。
    * name 參數(shù)是一個(gè) String,用于指定所需字段的簡(jiǎn)稱。 
要反映的字段由下面的算法確定。設(shè) C 為此對(duì)象所表示的類: 

如果 C 聲明一個(gè)帶有指定名的公共字段,則它就是要反映的字段。 
如果在第 1 步中沒有找到任何字段,則該算法被遞歸地應(yīng)用于 C 的每一個(gè)直接超接口。直接超接口按其聲明順序進(jìn)行搜索。 
如果在第 1、2 兩步?jīng)]有找到任何字段,且 C 有一個(gè)超類 S,則在 S 上遞歸調(diào)用該算法。如果 C 沒有超類,則拋出 NoSuchFieldException。 
請(qǐng)參閱 Java Language Specification 的第 8.2 和 8.3 節(jié)。 


參數(shù):
    * name-字段名 
返回:
    * 由name指定的該類的Field對(duì)象 
拋出: 
    * NoSuchFieldException-如果沒有找到帶有指定名的字段。 
    * NullPointerException-如果name為null 
    * SecurityException-如果存在安全管理器s,并滿足下列任一條件: 
        * 調(diào)用s.checkMemberAccess(this, Member.PUBLIC)拒絕訪問字段 
        * 調(diào)用者的類加載器不同于也不是當(dāng)前類的類加載器的一個(gè)祖先,并且對(duì)s.checkPackageAccess()的調(diào)用            拒絕訪問該類的包 
4.06 getFields()
方法:
    * public Field[] getFields() throws SecurityException
功能:
    * 返回一個(gè)包含某些 Field 對(duì)象的數(shù)組,這些對(duì)象反映此 Class 對(duì)象所表示的類或接口的所有可訪問公共字段。返回?cái)?shù)組中的元素沒有排序,也沒有任何特定的順序。如果類或接口沒有可訪問的公共字段,或者表示一個(gè)數(shù)組類、一個(gè)基本類型或 void,則此方法返回長(zhǎng)度為 0 的數(shù)組。 
特別地,如果該 Class 對(duì)象表示一個(gè)類,則此方法返回該類及其所有超類的公共字段。如果該 Class 對(duì)象表示一個(gè)接口,則此方法返回該接口及其所有超接口的公共字段。 

該方法不反映數(shù)組類的隱式長(zhǎng)度字段。用戶代碼應(yīng)使用 Array 類的方法來操作數(shù)組。 

請(qǐng)參閱 Java Language Specification 的第 8.2 和 8.3 節(jié)。 


返回:
表示公共字段的 Field 對(duì)象的數(shù)組 
拋出: 
SecurityException - 如果存在安全管理器 s,并滿足下列任一條件: 
調(diào)用 s.checkMemberAccess(this, Member.PUBLIC) 拒絕訪問該類中的字段 
調(diào)用者的類加載器不同于也不是當(dāng)前類的類加載器的一個(gè)祖先,并且對(duì) s.checkPackageAccess() 的調(diào)用拒絕訪問該類的包 
4.07 getDeclaredField()
public Field getDeclaredField(String name)
                       throws NoSuchFieldException,
                              SecurityException返回一個(gè) Field 對(duì)象,該對(duì)象反映此 Class 對(duì)象所表示的類或接口的指定已聲明字段。name 參數(shù)是一個(gè) String,它指定所需字段的簡(jiǎn)稱。注意,此方法不反映數(shù)組類的 length 字段。 

參數(shù):
name - 字段名 
返回:
此類中指定字段的 Field 對(duì)象 
拋出: 
NoSuchFieldException - 如果找不到帶有指定名稱的字段。 
NullPointerException - 如果 name 為 null 
SecurityException - 如果存在安全管理器 s,并滿足下列任一條件: 
調(diào)用 s.checkMemberAccess(this, Member.DECLARED) 拒絕訪問已聲明字段 
調(diào)用者的類加載器不同于也不是當(dāng)前類的類加載器的一個(gè)祖先,并且對(duì) s.checkPackageAccess() 的調(diào)用拒絕訪問該類的包 
4.08 getDeclaredFields()
public Field[] getDeclaredFields()
                          throws SecurityException返回 Field 對(duì)象的一個(gè)數(shù)組,這些對(duì)象反映此 Class 對(duì)象所表示的類或接口所聲明的所有字段。包括公共、保護(hù)、默認(rèn)(包)訪問和私有字段,但不包括繼承的字段。返回?cái)?shù)組中的元素沒有排序,也沒有任何特定的順序。如果該類或接口不聲明任何字段,或者此 Class 對(duì)象表示一個(gè)基本類型、一個(gè)數(shù)組類或 void,則此方法返回一個(gè)長(zhǎng)度為 0 的數(shù)組。 
請(qǐng)參閱 Java Language Specification 的第 8.2 和 8.3 節(jié)。 


返回:
表示此類所有已聲明字段的 Field 對(duì)象的數(shù)組 
拋出: 
SecurityException - 如果存在安全管理器 s,并滿足下列任一條件: 
調(diào)用 s.checkMemberAccess(this, Member.DECLARED) 拒絕訪問此類中已聲明的字段 
調(diào)用者的類加載器不同于也不是當(dāng)前類的類加載器的一個(gè)祖先,并且對(duì) s.checkPackageAccess() 的調(diào)用拒絕訪問該類的包 
4.09 getMethod()
public Method getMethod(String name,
                        Class... parameterTypes)
                 throws NoSuchMethodException,
                        SecurityException返回一個(gè) Method 對(duì)象,它反映此 Class 對(duì)象所表示的類或接口的指定公共成員方法。name 參數(shù)是一個(gè) String,用于指定所需方法的簡(jiǎn)稱。parameterTypes 參數(shù)是按聲明順序標(biāo)識(shí)該方法形參類型的 Class 對(duì)象的一個(gè)數(shù)組。如果 parameterTypes 為 null,則按空數(shù)組處理。 
如果 name 是 ";" 或 "",則將引發(fā) NoSuchMethodException。否則,要反映的方法由下面的算法確定(設(shè) C 為此對(duì)象所表示的類): 

在 C 中搜索任一匹配的方法。如果找不到匹配的方法,則將在 C 的超類上遞歸調(diào)用第 1 步算法。 
如果在第 1 步中沒有找到任何方法,則在 C 的超接口中搜索匹配的方法。如果找到了這樣的方法,則反映該方法。 
在 C 類中查找匹配的方法:如果 C 正好聲明了一個(gè)具有指定名稱的公共方法并且恰恰有相同的形參類型,則它就是反映的方法。如果在 C 中找到了多個(gè)這樣的方法,并且其中有一個(gè)方法的返回類型比其他方法的返回類型都特殊,則反映該方法;否則將從中任選一個(gè)方法。 
注意,類中可以有多個(gè)匹配方法,因?yàn)楸M管 Java 語(yǔ)言禁止類聲明帶有相同簽名但不同返回類型的多個(gè)方法,但 Java 虛擬機(jī)并不禁止。這增加了虛擬機(jī)的靈活性,可以用來實(shí)現(xiàn)各種語(yǔ)言特性。例如,可以使用橋方法 (brige method)實(shí)現(xiàn)協(xié)變返回;橋方法以及將被重寫的方法將具有相同的簽名,不同的返回類型。 

請(qǐng)參閱Java 語(yǔ)言規(guī)范 第 8.2 和 8.4 節(jié)。 


參數(shù):
name - 方法名
parameterTypes - 參數(shù)列表 
返回:
與指定的 name 和 parameterTypes 匹配的 Method 對(duì)象 
拋出: 
NoSuchMethodException - 如果找不到匹配的方法,或者方法名為 "" 或 "" 
NullPointerException - 如果 name 為 null 
SecurityException - 如果存在安全管理器 s,并滿足下列任一條件: 
調(diào)用 s.checkMemberAccess(this, Member.PUBLIC) 拒絕訪問方法 
調(diào)用者的類加載器不同于也不是當(dāng)前類的類加載器的一個(gè)祖先,并且對(duì) s.checkPackageAccess() 的調(diào)用拒絕訪問該類的包 
4.10 getMethods()
方法:
    * public Method[] getMethods() throws SecurityException
功能:
    * 返回一個(gè)包含某些 Method 對(duì)象的數(shù)組,這些對(duì)象反映此 Class 對(duì)象所表示的類或接口(包括那些由該類或接口聲明的以及從超類和超接口繼承的那些的類或接口)的公共 member 方法。數(shù)組類返回從 Object 類繼承的所有(公共)member 方法。返回?cái)?shù)組中的元素沒有排序,也沒有任何特定的順序。如果此 Class 對(duì)象表示沒有公共成員方法的類或接口,或者表示一個(gè)基本類型或 void,則此方法返回長(zhǎng)度為 0 的數(shù)組。 
類初始化方法  不包含在返回的數(shù)組中。如果類聲明了帶有相同參數(shù)類型的多個(gè)公共成員方法,則它們都會(huì)包含在返回的數(shù)組中。 

請(qǐng)參閱 Java Language Specification 的第 8.2 和 8.4 節(jié)。 


返回:
表示此類中公共方法的 Method 對(duì)象的數(shù)組 
拋出: 
SecurityException - 如果存在安全管理器 s,并滿足下列任一條件: 
調(diào)用 s.checkMemberAccess(this, Member.PUBLIC) 拒絕訪問該類中的方法 
調(diào)用者的類加載器不同于也不是當(dāng)前類的類加載器的一個(gè)祖先,并且對(duì) s.checkPackageAccess() 的調(diào)用拒絕訪問該類的包 
4.11 getDeclaredMethod()
public Method getDeclaredMethod(String name,
                                Class... parameterTypes)
                         throws NoSuchMethodException,
                                SecurityException返回一個(gè) Method 對(duì)象,該對(duì)象反映此 Class 對(duì)象所表示的類或接口的指定已聲明方法。name 參數(shù)是一個(gè) String,它指定所需方法的簡(jiǎn)稱,parameterTypes 參數(shù)是 Class 對(duì)象的一個(gè)數(shù)組,它按聲明順序標(biāo)識(shí)該方法的形參類型。如果在某個(gè)類中聲明了帶有相同參數(shù)類型的多個(gè)方法,并且其中有一個(gè)方法的返回類型比其他方法的返回類型都特殊,則返回該方法;否則將從中任選一個(gè)方法。如果名稱是 "” 或 “",則引發(fā)一個(gè) NoSuchMethodException。 

參數(shù):
name - 方法名
parameterTypes - 參數(shù)數(shù)組 
返回:
該類與指定名和參數(shù)相匹配的方法的 Method 對(duì)象 
拋出: 
NoSuchMethodException - 如果找不到匹配的方法。 
NullPointerException - 如果 name 為 null 
SecurityException - 如果存在安全管理器 s,并滿足下列任一條件: 
調(diào)用 s.checkMemberAccess(this, Member.DECLARED) 拒絕訪問已聲明方法 
調(diào)用者的類加載器不同于也不是當(dāng)前類的類加載器的一個(gè)祖先,并且對(duì) s.checkPackageAccess() 的調(diào)用拒絕訪問該類的包 
4.12 getDeclaredMethods()
方法:
    * public Method[] getDeclaredMethods() throws SecurityException
功能:
    * 返回 Method 對(duì)象的一個(gè)數(shù)組,這些對(duì)象反映此 Class 對(duì)象表示的類或接口聲明的所有方法,包括公共、保護(hù)、默認(rèn)(包)訪問和私有方法,但不包括繼承的方法。返回?cái)?shù)組中的元素沒有排序,也沒有任何特定的順序。如果該類或接口不聲明任何方法,或者此 Class 對(duì)象表示一個(gè)基本類型、一個(gè)數(shù)組類或 void,則此方法返回一個(gè)長(zhǎng)度為 0 的數(shù)組。類初始化方法  不包含在返回?cái)?shù)組中。如果該類聲明帶有相同參數(shù)類型的多個(gè)公共成員方法,則它們都包含在返回的數(shù)組中。 
請(qǐng)參閱 Java Language Specification 第 8.2 節(jié)。 


返回:
表示此類所有聲明方法的 Method 對(duì)象的數(shù)組 
拋出: 
SecurityException - 如果存在安全管理器 s,并滿足下列任一條件: 
調(diào)用 s.checkMemberAccess(this, Member.DECLARED) 拒絕訪問該類中已聲明的方法 
調(diào)用者的類加載器不同于也不是當(dāng)前類的類加載器的一個(gè)祖先,并且對(duì) s.checkPackageAccess() 的調(diào)用拒絕訪問該類的包 
四、Constructor類 1. Constructor類的全稱
public final class Constructor extends AccessibleObject 
implements GenericDeclaration, Member
2. Constructor類的概述 3. Constructor類的構(gòu)造方法 4. Constructor類的成員方法 4.01 equals(Object obj)
方法:
    * public boolean equals(Object obj)
功能:
    * 將此Constructor對(duì)象與指定的對(duì)象進(jìn)行比較。
    * 如果對(duì)象相同,則返回true。
    * 如果由相同的類聲明并且具有相同的形參類型,那么這兩個(gè)Constructor對(duì)象是相同的。 
重寫:
    * 類Object中的equals
參數(shù):
    * obj-要與之比較的引用對(duì)象。 
返回:
    * 如果此對(duì)象與obj參數(shù)相同,則返回true;否則返回false。
4.02 getAnnotation(Class annotationClass)
方法:
    * public  T getAnnotation(Class annotationClass)
功能:
    * 如果存在該元素的指定類型的注釋,則返回這些注釋,否則返回null。 
指定者:
    * AnnotatedElement接口中的getAnnotation,
      Constructor類繼承AccessibleObject類, 
      AccessibleObject類實(shí)現(xiàn)了AnnotatedElement接口。    
覆蓋:
    * 類AccessibleObject中的getAnnotation
參數(shù):
    * annotationClass-對(duì)應(yīng)于注釋類型的Class對(duì)象 
返回:
    * 如果該元素的指定注釋類型的注釋存在于此對(duì)象上,則返回這些注釋,否則返回null 
拋出: 
    * NullPointerException-如果給定的注釋類為null
4.03 getDeclaredAnnotations()
方法:
    * public Annotation[] getDeclaredAnnotations()
功能:
    * 返回直接存在于此元素上的所有注釋。
    * 與此接口中的其他方法不同,該方法將忽略繼承的注釋。
      如果沒有注釋直接存在于此元素上,則返回長(zhǎng)度為零的一個(gè)數(shù)組。
    * 該方法的調(diào)用者可以隨意修改返回的數(shù)組;這不會(huì)對(duì)其他調(diào)用者返回的數(shù)組產(chǎn)生任何影響。 
指定者:
    * 接口AnnotatedElement中的getDeclaredAnnotations
覆蓋:
    * 類AccessibleObject中的getDeclaredAnnotations
返回:
    * 直接存在于此元素上的所有注釋
4.04 getDeclaringClass()
方法:
    * public Class getDeclaringClass()
功能:
    * 返回Class對(duì)象,該對(duì)象表示聲明由此Constructor對(duì)象表示的構(gòu)造方法的類。 
指定者:
    * 接口Member中的getDeclaringClass
返回:
    * 表示聲明底層成員的類的對(duì)象
4.05 getExceptionTypes()
方法:
    * public Class[] getExceptionTypes()
功能:
    * 返回一組表示聲明要拋出的異常類型的Class對(duì)象,這些異常是由此對(duì)象表示的底層構(gòu)造方法拋出的。
    * 如果該構(gòu)造方法聲明其 throws 子句中沒有任何異常,則返回一個(gè)長(zhǎng)度為 0 的數(shù)組。 
返回:
    * 聲明由此對(duì)象表示的構(gòu)造方法拋出的異常類型
4.06 getGenericExceptionTypes()
方法:
    * public Type[] getGenericExceptionTypes()
功能:
    * 返回一組Type對(duì)象,這些對(duì)象表示聲明要由此Constructor對(duì)象拋出的異常。
    * 如果底層方法聲明其throws子句中沒有任何異常,則返回一個(gè)長(zhǎng)度為0的數(shù)組。 
    * 如果異常類型是一個(gè)參數(shù)化類型,那么為它返回的Type對(duì)象必須準(zhǔn)確地反映源代碼中使用的實(shí)際類型參數(shù)。 
    * 如果異常的類型是一個(gè)類型變量或是一個(gè)參數(shù)化類型,則創(chuàng)建它。否則將解析它。 
返回:
    * 表示底層方法拋出的異常類型的一組Type對(duì)象 
拋出: 
    * TypeNotPresentException-如果底層方法的throws子句引用了不存在的類型聲明 
4.07 getGenericParameterTypes()
方法:
    * public Type[] getGenericParameterTypes()
功能:
    * 按照聲明順序返回一組 Type 對(duì)象,這些對(duì)象表示此 Constructor 對(duì)象所表示的方法的形參類型。如果底層方法不帶任何參數(shù),則返回一個(gè)長(zhǎng)度為 0 的數(shù)組。 
如果形參類型是一個(gè)參數(shù)化類型,那么為它返回的 Type 對(duì)象必須準(zhǔn)確地反映源代碼中使用的實(shí)際類型參數(shù)。 

如果形參類型是一個(gè)類型變量或者是一個(gè)參數(shù)化類型,則創(chuàng)建它。否則將解析它。 


返回:
按照聲明順序返回一組 Type 對(duì)象,該對(duì)象表示底層方法的形參類型 
拋出: 
GenericSignatureFormatError - 如果這個(gè)一般方法的簽名不符合 Java Virtual Machine Specification, 3rd edition 指定的格式 
TypeNotPresentException - 如果任何底層方法的參數(shù)類型引用了不存在的類型聲明 
MalformedParameterizedTypeException - 如果任何底層方法的參數(shù)類型引用了因某種原因而無法實(shí)例化的參數(shù)化類型
4.08 getModifiers()
public int getModifiers()以整數(shù)形式返回此 Constructor 對(duì)象所表示構(gòu)造方法的 Java 語(yǔ)言修飾符。應(yīng)該使用 Modifier 類對(duì)這些修飾符進(jìn)行解碼。 

指定者:
接口 Member 中的 getModifiers
返回:
底層成員的 Java 語(yǔ)言修飾符
4.09 getName()
方法:
    * public String getName()
功能:
    * 以字符串形式返回此構(gòu)造方法的名稱。
    * 它總是與構(gòu)造方法的聲明類的簡(jiǎn)單名稱相同。 
指定者:
    * 接口Member中的getName
返回:
    * 底層成員的簡(jiǎn)單名稱
4.10 getParameterAnnotations()
public Annotation[][] getParameterAnnotations()按照聲明順序返回一組數(shù)組,這些數(shù)組表示通過此 Constructor 對(duì)象表示的方法的形參上的注釋。(如果底層方法沒有參數(shù),則返回一個(gè)長(zhǎng)度為零的數(shù)組。如果該方法有一個(gè)或多個(gè)參數(shù),則為每個(gè)不帶注釋的參數(shù)返回一個(gè)長(zhǎng)度為零的嵌套數(shù)組。)包含在返回?cái)?shù)組中的注釋對(duì)象是可序列化的。此方法的調(diào)用者可以自由地修改返回的數(shù)組;它對(duì)返回給其他調(diào)用者的數(shù)組沒有影響。 

返回:
按照聲明順序返回的一組數(shù)組,這些數(shù)組表示此 Constructor 對(duì)象表示的方法的形參上的注釋
4.11 getParameterTypes()
public Class[] getParameterTypes()按照聲明順序返回一組 Class 對(duì)象,這些對(duì)象表示此 Constructor 對(duì)象所表示構(gòu)造方法的形參類型。如果底層構(gòu)造方法不帶任何參數(shù),則返回一個(gè)長(zhǎng)度為 0 的數(shù)組。 

返回:
此對(duì)象表示的構(gòu)造方法的參數(shù)類型
4.12 getTypeParameters()
public TypeVariable>[] getTypeParameters()按照聲明順序返回一組 TypeVariable 對(duì)象,這些對(duì)象表示通過此 GenericDeclaration 對(duì)象所表示的一般聲明來聲明的類型變量。如果底層一般聲明未聲明任何類型的變量,則返回一個(gè)長(zhǎng)度為 0 的數(shù)組。 

指定者:
接口 GenericDeclaration 中的 getTypeParameters
返回:
表示通過此一般聲明來聲明的類型變量的一組 TypeVariable 對(duì)象 
拋出: 
GenericSignatureFormatError - 如果此一般聲明的一般簽名不符合 Java Virtual Machine Specification, 3rd edition 指定的格式
4.13 hashCode()
public int hashCode()返回此 Constructor 的哈希碼。該哈希碼與底層構(gòu)造方法的聲明類名的哈希碼相同。 

覆蓋:
類 Object 中的 hashCode
返回:
此對(duì)象的一個(gè)哈希碼值。
4.14 isSynthetic()
public boolean isSynthetic()如果此構(gòu)造方法是一個(gè)復(fù)合構(gòu)造方法,則返回 true;否則返回 false。 

指定者:
接口 Member 中的 isSynthetic
返回:
當(dāng)且僅當(dāng)此構(gòu)造方法是按照 Java Language Specification 定義的復(fù)合構(gòu)造方法時(shí)才返回 true。
4.15 isVarArgs()
方法:
    * public boolean isVarArgs()
功能:
    * 如果聲明此構(gòu)造方法可以帶可變數(shù)量的參數(shù),則返回true;否則返回false。 
返回:
    * 當(dāng)且僅當(dāng)聲明此構(gòu)造方法可以帶可變數(shù)量的參數(shù)時(shí)才返回true。
4.16 newInstance(Object... initargs)
方法:
    * public T newInstance(Object... initargs) throws InstantiationException,
                                                         IllegalAccessException,
                                                        IllegalArgumentException,
                                                        InvocationTargetException
功能:
    * 使用此 Constructor 對(duì)象表示的構(gòu)造方法來創(chuàng)建該構(gòu)造方法的聲明類的新實(shí)例,并用指定的初始化參數(shù)初始化該實(shí)例。個(gè)別參數(shù)會(huì)自動(dòng)解包,以匹配基本形參,必要時(shí),基本參數(shù)和引用參數(shù)都要進(jìn)行方法調(diào)用轉(zhuǎn)換。 
如果底層構(gòu)造方法所需形參數(shù)為 0,則所提供的 initargs 數(shù)組的長(zhǎng)度可能為 0 或 null。 

如果構(gòu)造方法的聲明類是非靜態(tài)上下文的內(nèi)部類,則構(gòu)造方法的第一個(gè)參數(shù)需要是封閉實(shí)例;請(qǐng)參閱Java 語(yǔ)言規(guī)范 第 15.9.3 節(jié)。 

如果所需的訪問檢查和參數(shù)檢查獲得成功并且實(shí)例化繼續(xù)進(jìn)行,這時(shí)構(gòu)造方法的聲明類尚未初始化,則初始化這個(gè)類。 

如果構(gòu)造方法正常完成,則返回新創(chuàng)建且已初始化的實(shí)例。 


參數(shù):
initargs - 將作為變量傳遞給構(gòu)造方法調(diào)用的對(duì)象數(shù)組;基本類型的值被包裝在適當(dāng)類型的包裝器對(duì)象(如 Float 中的 float)中。 
返回:
通過調(diào)用此對(duì)象表示的構(gòu)造方法來創(chuàng)建的新對(duì)象 
拋出: 
IllegalAccessException - 如果此 Constructor 對(duì)象實(shí)施 Java 語(yǔ)言訪問控制并且底層構(gòu)造方法是不可訪問的。 
IllegalArgumentException - 如果實(shí)參和形參的數(shù)量不同;如果基本參數(shù)的解包轉(zhuǎn)換失??;如果在可能的解包后,無法通過方法調(diào)用轉(zhuǎn)換將參數(shù)值轉(zhuǎn)換為相應(yīng)的形參類型;如果此構(gòu)造方法屬于枚舉類型。 
InstantiationException - 如果聲明底層構(gòu)造方法的類表示抽象類。 
InvocationTargetException - 如果底層構(gòu)造方法拋出異常。 
ExceptionInInitializerError - 如果此方法引發(fā)的初始化失敗。
4.17 toGenericString()
public String toGenericString()返回描述此 Constructor 的字符串,其中包括類型參數(shù)。該字符串是作為構(gòu)造方法訪問修飾符(如果有)格式化的,其后面是構(gòu)造方法的類型參數(shù)(如果有)的加尖括號(hào)的、逗號(hào)分隔的列表,再往后是聲明類的完全限定名,再往后是該構(gòu)造方法的一般形參類型的加括號(hào)的、逗號(hào)分隔的列表。空格用來分隔訪問修飾符與訪問修飾符,以及訪問修飾符與類型參數(shù)或返回值。如果沒有類型參數(shù),則省略類型參數(shù)列表;如果存在類型參數(shù)列表,則用空格分隔列表與類名。如果聲明構(gòu)造方法拋出異常,則參數(shù)列表后跟著一個(gè)空格,再往后是單詞 "throws" ,再往后是用逗號(hào)分隔的所拋出異常類型的列表。 
構(gòu)造方法唯一可能的修飾符是訪問修飾符 public、protected 或 private。這些修飾符只能出現(xiàn)一個(gè),或者一個(gè)也不出現(xiàn)(如果構(gòu)造方法具有默認(rèn)(包)訪問權(quán))。 


返回:
描述此 Constructor 的字符串,其中包括類型參數(shù)
4.18 toString()
方法:
    * public String toString()
功能:
    * 返回描述此Constructor的字符串。
    * 該字符串是作為構(gòu)造方法訪問修飾符(如果有)格式化的,其后面是聲明類的完全限定名,再往后是構(gòu)造方法形參       類型的加括號(hào)的、逗號(hào)分隔的列表。
    * 構(gòu)造方法唯一可能的修飾符是訪問修飾符 public、protected 或 private。
    * 這些修飾符只能出現(xiàn)一個(gè),或者一個(gè)也不出現(xiàn)(如果構(gòu)造方法具有默認(rèn)(包)訪問權(quán))。 
覆蓋:
    * 類Object中的toString。
返回:
    * 該對(duì)象的字符串表示形式。
五、Field類 1. Field類的全稱
public final class Field extends AccessibleObject 
implements Member
2. Field類的概述 3. Field類的構(gòu)造方法 4. Field類的成員方法 4.01 get()
方法:
    * public Object get(Object obj) 
      throws IllegalArgumentException,IllegalAccessException
功能:
    * 返回指定對(duì)象上此Field表示的字段的值。
    * 如果該值是一個(gè)基本類型值,則自動(dòng)將其包裝在一個(gè)對(duì)象中。 
    * 底層字段的值是按以下方式獲得的: 
        * 如果底層字段是一個(gè)靜態(tài)字段,則忽略 obj 變量;它可能為 null。 
        * 否則,底層字段是一個(gè)實(shí)例字段。如果指定的 obj 變量為 null,則該方法將拋出一個(gè) NullPointerException。
        如果指定對(duì)象不是聲明底層字段的類或接口的實(shí)例,則該方法將拋出一個(gè) IllegalArgumentException。 

如果此 Field 對(duì)象強(qiáng)制實(shí)施 Java 語(yǔ)言訪問控制,并且底層字段是不可訪問的,則該方法將拋出一個(gè) IllegalAccessException。如果底層字段是靜態(tài)的,并且聲明該字段的類尚未初始化,則初始化這個(gè)類。 

否則,從底層實(shí)例字段或靜態(tài)字段中獲取該值。如果該字段是一個(gè)基本類型字段,則在返回前將該值包裝在一個(gè)對(duì)象中,否則照原樣返回。 

如果字段隱藏在 obj 的類型中,則根據(jù)前面的規(guī)則獲得字段的值。 


參數(shù):
    * obj-從中提取所表示字段的值的對(duì)象 
返回:
    * 對(duì)象 obj 中的所表示字段的值;在返回之前,基值包裝在一個(gè)適當(dāng)?shù)膶?duì)象中 
拋出: 
    * IllegalAccessException - 如果底層字段是不可訪問的。 
    * IllegalArgumentException - 如果指定對(duì)象不是聲明底層字段(或者其子類或?qū)崿F(xiàn)者)的類或接口的實(shí)例。 
    * NullPointerException - 如果指定對(duì)象為 null 并且字段是一個(gè)實(shí)例字段。 
    * ExceptionInInitializerError - 如果此方法引起的初始化失敗。
4.02 getByte()
public byte getByte(Object obj)
             throws IllegalArgumentException,
                    IllegalAccessException獲取一個(gè)靜態(tài)或?qū)嵗?byte 字段的值。 

參數(shù):
obj - 從中提取 byte 值的對(duì)象 
返回:
byte 字段的值 
拋出: 
IllegalAccessException - 如果底層字段是不可訪問的。 
IllegalArgumentException - 如果指定對(duì)象不是聲明底層字段(或者其子類或?qū)崿F(xiàn)者)的類或接口的實(shí)例,或者無法通過擴(kuò)展轉(zhuǎn)換將字段值轉(zhuǎn)換為 byte 類型。 
NullPointerException - 如果指定對(duì)象為 null 并且字段是一個(gè)實(shí)例字段。 
ExceptionInInitializerError - 如果此方法引起的初始化失敗。
4.03 getChar()
public char getChar(Object obj)
             throws IllegalArgumentException,
                    IllegalAccessException獲取 char 類型或另一個(gè)通過擴(kuò)展轉(zhuǎn)換可以轉(zhuǎn)換為 char 類型的基本類型的靜態(tài)或?qū)嵗侄蔚闹怠?

參數(shù):
obj - 從中提取 char 值的對(duì)象 
返回:
轉(zhuǎn)換為 char 類型的字段的值 
拋出: 
IllegalAccessException - 如果底層字段是不可訪問的。 
IllegalArgumentException - 如果指定對(duì)象不是聲明底層字段(或者其子類或?qū)崿F(xiàn)者)的類或接口的實(shí)例,或者無法通過擴(kuò)展轉(zhuǎn)換將字段值轉(zhuǎn)換為 char 類型。 
NullPointerException - 如果指定對(duì)象為 null 并且字段是一個(gè)實(shí)例字段。 
ExceptionInInitializerError - 如果此方法引起的初始化失敗。
4.04 set()
public void set(Object obj,
                Object value)
         throws IllegalArgumentException,
                IllegalAccessException將指定對(duì)象變量上此 Field 對(duì)象表示的字段設(shè)置為指定的新值。如果底層字段的類型為基本類型,則對(duì)新值進(jìn)行自動(dòng)解包。 
進(jìn)行此操作的方式如下: 

如果底層字段是靜態(tài)字段,則忽略 obj 變量;它可能為 null。 

否則底層字段是一個(gè)實(shí)例字段。如果指定對(duì)象變量為 null,則該方法將拋出一個(gè) NullPointerException。如果指定對(duì)象變量不是聲明底層字段的類或接口的實(shí)例,則該方法將拋出一個(gè) IllegalArgumentException。 

如果此 Field 對(duì)象實(shí)施 Java 語(yǔ)言訪問控制,并且底層字段是不可訪問的,則該方法將拋出一個(gè) IllegalAccessException。 

如果底層字段為 final 字段,則該方法將拋出一個(gè) IllegalAccessException,除非 setAccessible(true) 已經(jīng)繼承該字段并且該字段是一個(gè)非靜態(tài)字段。在通過程序的其他部分可以訪問類的實(shí)例之前,只有使用空白 final 字段反序列化或重構(gòu)類的實(shí)例期間,以這種方式設(shè)置 final 字段才有意義。在其他任何上下文中使用該方法都可能會(huì)有不可預(yù)知的結(jié)果,包括程序的其他部分繼續(xù)使用該字段的原始值的情況。 

如果底層字段的類型為某一基本類型,則可以嘗試使用解包轉(zhuǎn)換將新值轉(zhuǎn)換為基本類型的值。如果該嘗試失敗,則此方法將拋出一個(gè) IllegalArgumentException。 

如果在進(jìn)行可能的解包之后,無法通過某一標(biāo)識(shí)或擴(kuò)展轉(zhuǎn)換將新值轉(zhuǎn)換為底層字段的類型,則此方法將拋出一個(gè) IllegalArgumentException。 

如果底層字段是靜態(tài)的,并且聲明該字段的類尚未初始化,則初始化這個(gè)類。 

字段被設(shè)置為可能已解包并擴(kuò)大的新值。 

如果字段隱藏在 obj 的類型中,則根據(jù)前面的規(guī)則設(shè)置字段的值。 


參數(shù):
obj - 應(yīng)該修改其字段的對(duì)象
value - 正被修改的 obj 的字段的新值 
拋出: 
IllegalAccessException - 如果底層字段是不可訪問的。 
IllegalArgumentException - 如果指定對(duì)象不是聲明底層字段(或者其子類或?qū)崿F(xiàn)者)的類或接口的實(shí)例,或者解包轉(zhuǎn)換失敗。 
NullPointerException - 如果指定對(duì)象為 null 并且字段是一個(gè)實(shí)例字段。 
ExceptionInInitializerError - 如果此方法引起的初始化失敗。
4.05 setBoolean()
public void setBoolean(Object obj,
                       boolean z)
                throws IllegalArgumentException,
                       IllegalAccessException將字段的值設(shè)置為指定對(duì)象上的一個(gè) boolean 值。該方法等同于 set(obj, zObj),其中 zObj 是一個(gè) Boolean 對(duì)象,并且 zObj.booleanValue() == z。 

參數(shù):
obj - 應(yīng)該修改其字段的對(duì)象
z - 正被修改的 obj 的字段的新值 
拋出: 
IllegalAccessException - 如果底層字段是不可訪問的。 
IllegalArgumentException - 如果指定對(duì)象不是聲明底層字段(或者其子類或?qū)崿F(xiàn)者)的類或接口的實(shí)例,或者解包轉(zhuǎn)換失敗。 
NullPointerException - 如果指定對(duì)象為 null 并且字段是一個(gè)實(shí)例字段。 
ExceptionInInitializerError - 如果此方法引起的初始化失敗。
4.06 setByte()
public void setByte(Object obj,
                    byte b)
             throws IllegalArgumentException,
                    IllegalAccessException將字段的值設(shè)置為指定對(duì)象上的一個(gè) byte 值。該方法等同于 set(obj, bObj),其中 bObj 是一個(gè) Byte 對(duì)象,并且 bObj.byteValue() == b。 

參數(shù):
obj - 應(yīng)該修改其字段的對(duì)象
b - 正被修改的 obj 的字段的新值 
拋出: 
IllegalAccessException - 如果底層字段是不可訪問的。 
IllegalArgumentException - 如果指定對(duì)象不是聲明底層字段(或者其子類或?qū)崿F(xiàn)者)的類或接口的實(shí)例,或者解包轉(zhuǎn)換失敗。 
NullPointerException - 如果指定對(duì)象為 null 并且字段是一個(gè)實(shí)例字段。 
ExceptionInInitializerError - 如果此方法引起的初始化失敗。
4.07 getName()
方法:
    * public String getName()以 String 的形式返回此 Class 對(duì)象所表示的實(shí)體(類、接口、數(shù)組類、基本類型或 void)名稱。 
如果此類對(duì)象表示的是非數(shù)組類型的引用類型,則返回該類的二進(jìn)制名稱,Java Language Specification, Second Edition 對(duì)此作了詳細(xì)說明。 

如果此類對(duì)象表示一個(gè)基本類型或 void,則返回的名字是一個(gè)與該基本類型或 void 所對(duì)應(yīng)的 Java 語(yǔ)言關(guān)鍵字相同的 String。 

如果此類對(duì)象表示一個(gè)數(shù)組類,則名字的內(nèi)部形式為:表示該數(shù)組嵌套深度的一個(gè)或多個(gè) "[" 字符加元素類型名。元素類型名的編碼如下: 

Element Type       Encoding  
boolean       Z  
byte       B  
char       C  
class or interface       Lclassname;  
double       D  
float       F  
int       I  
long       J  
short       S  

類或接口名 classname 是上面指定類的二進(jìn)制名稱。 

示例: 

 String.class.getName()
     returns "java.lang.String"
 byte.class.getName()
     returns "byte"
 (new Object[3]).getClass().getName()
     returns "[Ljava.lang.Object;"
 (new int[3][4][5][6][7][8][9]).getClass().getName()
     returns "[[[[[[[I"
 
返回:
此對(duì)象所表示的類或接口名。
4.08 getModifiers()
方法:
    * public int getModifiers()
功能:
    * 返回此類或接口以整數(shù)編碼的 Java 語(yǔ)言修飾符
    * 修飾符由 Java 虛擬機(jī)的 public、protected、private、final、static、abstract和interface 對(duì)應(yīng)的常量組成;它們應(yīng)當(dāng)使用 Modifier 類的方法來解碼。 
    * 如果底層類是數(shù)組類,則其 public、private 和 protected 修飾符與其組件類型的修飾符相同。如果此 Class 表示一個(gè)基本類型或 void,則其 public 修飾符始終為 true,protected 和 private 修飾符始終為 false。如果此對(duì)象表示一個(gè)數(shù)組類、一個(gè)基本類型或 void,則其 final 修飾符始終為 true,其接口修飾符始終為 false。該規(guī)范沒有給定其他修飾符的值。 


返回:
    * 表示該類修飾符的int
六、Method類 1. Method類的全稱
public final class Method extends AccessibleObject
implements GenericDeclaration, Member
2. Method類的概述 3. Method類的構(gòu)造方法
4. Method類的成員方法 4.01 invoke()
方法:
    * public Object invoke(Object obj,Object... args)
      throws IllegalAccessException,IllegalArgumentException,InvocationTargetException
功能:
    * 對(duì)帶有指定參數(shù)的指定對(duì)象調(diào)用由此Method對(duì)象表示的底層方法。
    * 個(gè)別參數(shù)被自動(dòng)解包,以便與基本形參相匹配,基本參數(shù)和引用參數(shù)都隨需服從方法調(diào)用轉(zhuǎn)換。 
    * 如果底層方法是靜態(tài)的,那么可以忽略指定的obj參數(shù)。該參數(shù)可以為null。 
    * 如果底層方法所需的形參數(shù)為 0,則所提供的 args 數(shù)組長(zhǎng)度可以為 0 或 null。 
    * 如果底層方法是實(shí)例方法,則使用動(dòng)態(tài)方法查找來調(diào)用它,這一點(diǎn)記錄在 Java Language Specification, Second Edition 的第 15.12.4.4 節(jié)中;在發(fā)生基于目標(biāo)對(duì)象的運(yùn)行時(shí)類型的重寫時(shí)更應(yīng)該這樣做。 

如果底層方法是靜態(tài)的,并且尚未初始化聲明此方法的類,則會(huì)將其初始化。 

如果方法正常完成,則將該方法返回的值返回給調(diào)用者;如果該值為基本類型,則首先適當(dāng)?shù)貙⑵浒b在對(duì)象中。但是,如果該值的類型為一組基本類型,則數(shù)組元素不 被包裝在對(duì)象中;換句話說,將返回基本類型的數(shù)組。如果底層方法返回類型為 void,則該調(diào)用返回 null。 


參數(shù):
    * obj - 從中調(diào)用底層方法的對(duì)象
    * args - 用于方法調(diào)用的參數(shù) 
返回:
    * 使用參數(shù) args 在 obj 上指派該對(duì)象所表示方法的結(jié)果 
拋出: 
    * IllegalAccessException-如果此Method對(duì)象強(qiáng)制執(zhí)行Java語(yǔ)言訪問控制,并且底層方法是不可訪問的。 
    * IllegalArgumentException-
            如果該方法是實(shí)例方法,且指定對(duì)象參數(shù)不是聲明底層方法的類或接口(或其中的子類或?qū)崿F(xiàn)程序)的實(shí)例;
            如果實(shí)參和形參的數(shù)量不相同;
            如果基本參數(shù)的解包轉(zhuǎn)換失敗;
            如果在解包后,無法通過方法調(diào)用轉(zhuǎn)換將參數(shù)值轉(zhuǎn)換為相應(yīng)的形參類型。 
    * InvocationTargetException-如果底層方法拋出異常。 
    * NullPointerException-如果指定對(duì)象為null,且該方法是一個(gè)實(shí)例方法。 
    * ExceptionInInitializerError-如果由此方法引起的初始化失敗。
4.02 getName()
方法:
    * public String getName()
功能:
    * 以String形式返回此Method對(duì)象表示的方法名稱
指定者:
    * 接口Member中的getName
返回:
    * 底層成員的簡(jiǎn)單名稱
4.03 getModifiers()
方法:
    * public int getModifiers()
功能:
    * 以整數(shù)形式返回此Method對(duì)象所表示方法的Java語(yǔ)言修飾符。
    * 應(yīng)該使用 Modifier 類對(duì)修飾符進(jìn)行解碼。 
指定者:
    * 接口Member中的getModifiers
返回:
    * 底層成員的Java語(yǔ)言修飾符
4.04 getReturnType()
方法:
    * public Class getReturnType()
功能:
    * 返回一個(gè)Class對(duì)象,該對(duì)象描述了此Method對(duì)象所表示的方法的正式返回類型。 
返回:
    * 此對(duì)象所表示的方法的返回類型
4.05 getParameterTypes()
方法:
    * public Class[] getParameterTypes()
功能:
    * 按照聲明順序返回Class對(duì)象的數(shù)組,這些對(duì)象描述了此Method對(duì)象所表示的方法的形參類型。
    * 如果底層方法不帶參數(shù),則返回長(zhǎng)度為0的數(shù)組。 
返回:
    * 此對(duì)象所表示的方法的參數(shù)類型
七、AccessibleObject類 1. AccessibleObject類的全稱
public class AccessibleObject extends Object
implements AnnotatedElement
2. AccessibleObject類的概述
AccessibleObject類是Field、Method 和 Constructor對(duì)象的基類。

它提供了將反射的對(duì)象標(biāo)記為在使用時(shí)取消默認(rèn) Java語(yǔ)言訪問控制檢查的能力。

對(duì)于公共成員、默認(rèn)訪問成員、受保護(hù)成員和私有成員,在分別使用Field、Method 或Constructor 對(duì)象來設(shè)置或獲取字段、調(diào)用方法,或者創(chuàng)建和初始化類的新實(shí)例的時(shí)候,會(huì)執(zhí)行訪問檢查。

在反射對(duì)象中設(shè)置accessible標(biāo)志允許具有足夠特權(quán)的復(fù)雜應(yīng)用程序(比如 Java Object Serialization 或其他持久性機(jī)制)以某種通常禁止使用的方式來操作對(duì)象。

3. AccessibleObject類的構(gòu)造方法
protected AccessibleObject() 構(gòu)造方法:僅供 Java 虛擬機(jī)使用。 
4. AccessibleObject類的成員方法 4.01 getAnnotation(Class annotationClass)
public  T getAnnotation(Class annotationClass)從接口 AnnotatedElement 復(fù)制的描述 
如果存在該元素的指定類型的注釋,則返回這些注釋,否則返回 null。 

指定者:
接口 AnnotatedElement 中的 getAnnotation
參數(shù):
annotationClass - 對(duì)應(yīng)于注釋類型的 Class 對(duì)象 
返回:
如果該元素的指定注釋類型的注釋存在于此對(duì)象上,則返回這些注釋,否則返回 null 
拋出: 
NullPointerException - 如果給定的注釋類為 null
4.02 getAnnotations()
public Annotation[] getAnnotations()從接口 AnnotatedElement 復(fù)制的描述 
返回此元素上存在的所有注釋。(如果此元素沒有注釋,則返回長(zhǎng)度為零的數(shù)組。)該方法的調(diào)用者可以隨意修改返回的數(shù)組;這不會(huì)對(duì)其他調(diào)用者返回的數(shù)組產(chǎn)生任何影響。 

指定者:
接口 AnnotatedElement 中的 getAnnotations
返回:
此元素上存在的所有注釋
4.03 getDeclaredAnnotations()
public Annotation[] getDeclaredAnnotations()從接口 AnnotatedElement 復(fù)制的描述 
返回直接存在于此元素上的所有注釋。與此接口中的其他方法不同,該方法將忽略繼承的注釋。(如果沒有注釋直接存在于此元素上,則返回長(zhǎng)度為零的一個(gè)數(shù)組。)該方法的調(diào)用者可以隨意修改返回的數(shù)組;這不會(huì)對(duì)其他調(diào)用者返回的數(shù)組產(chǎn)生任何影響。 

指定者:
接口 AnnotatedElement 中的 getDeclaredAnnotations
返回:
直接存在于此元素上的所有注釋
4.04 isAccessible()
public boolean isAccessible()獲取此對(duì)象的 accessible 標(biāo)志的值。 

返回:
此對(duì)象的 accessible 標(biāo)志的值。
4.05 isAnnotationPresent(Class
public boolean isAnnotationPresent(Class annotationClass)從接口 AnnotatedElement 復(fù)制的描述 
如果指定類型的注釋存在于此元素上,則返回 true,否則返回 false。此方法主要是為了便于訪問標(biāo)記注釋而設(shè)計(jì)的。 

指定者:
接口 AnnotatedElement 中的 isAnnotationPresent
參數(shù):
annotationClass - 對(duì)應(yīng)于注釋類型的 Class 對(duì)象 
返回:
如果指定注釋類型的注釋存在于此對(duì)象上,則返回 true,否則返回 false 
拋出: 
NullPointerException - 如果給定的注釋類為 null
4.06 setAccessible(AccessibleObject[] array,boolean flag)
public static void setAccessible(AccessibleObject[] array,boolean flag)
                          throws SecurityException使用單一安全性檢查(為了提高效率)為一組對(duì)象設(shè)置 accessible 標(biāo)志的便捷方法。 
首先,如果存在安全管理器,則在 ReflectPermission("suppressAccessChecks") 權(quán)限下調(diào)用 checkPermission 方法。 

如果 flag 為 true,但是不能更改輸入 array 的任何元素的可訪問性(例如,如果元素對(duì)象是 Class 類的 Constructor 對(duì)象),則會(huì)引發(fā) SecurityException。如果發(fā)生 SecurityException,對(duì)于少于(不包括)發(fā)生異常的元素的數(shù)組元素,可以將對(duì)象的可訪問性設(shè)置為 flag;對(duì)于超出(包括)引發(fā)異常的元素的那些元素,則不更改其可訪問性。 


參數(shù):
array - AccessibleObjects 的數(shù)組
flag - 每個(gè)對(duì)象中的 accessible 標(biāo)志的新值 
拋出: 
SecurityException - 如果請(qǐng)求被拒絕。
4.07 setAccessible(boolean flag)
public void setAccessible(boolean flag)
                   throws SecurityException將此對(duì)象的 accessible 標(biāo)志設(shè)置為指示的布爾值。值為 true 則指示反射的對(duì)象在使用時(shí)應(yīng)該取消 Java 語(yǔ)言訪問檢查。值為 false 則指示反射的對(duì)象應(yīng)該實(shí)施 Java 語(yǔ)言訪問檢查。 
首先,如果存在安全管理器,則在 ReflectPermission("suppressAccessChecks") 權(quán)限下調(diào)用 checkPermission 方法。 

如果 flag 為 true,并且不能更改此對(duì)象的可訪問性(例如,如果此元素對(duì)象是 Class 類的 Constructor 對(duì)象),則會(huì)引發(fā) SecurityException。 

如果此對(duì)象是 java.lang.Class 類的 Constructor 對(duì)象,并且 flag 為 true,則會(huì)引發(fā) SecurityException。 


參數(shù):
flag - accessible 標(biāo)志的新值 
拋出: 
SecurityException - 如果請(qǐng)求被拒絕。
八、Modifier類 1. Modifier類的全稱
public enum Modifier extends Enum
2. Modifier類的概述 3. Modifier類的枚舉常量
枚舉 意義
public static final Modifier PUBLIC 修飾符 public
public static final Modifier PROTECTED 修飾符 protected
public static final Modifier PRIVATE 修飾符 private
public static final Modifier ABSTRACT 修飾符 abstract
public static final Modifier STATIC 修飾符 static
public static final Modifier FINAL 修飾符 final
public static final Modifier TRANSIENT 修飾符 transient
public static final Modifier VOLATILE 修飾符 volatile
public static final Modifier SYNCHRONIZED 修飾符 synchronized
public static final Modifier NATIVE 修飾符 native
public static final Modifier STRICTFP 修飾符 strictfp
4. Modifier類的成員方法 4.01 toString()
方法:
    * public String toString()
功能:
    * 返回此修飾符的小寫名稱。 
覆蓋:
    * 類Enum中的toString
返回:
    * 枚舉常量的名稱
4.02 valueOf(String name)
方法:
    * public static Modifier valueOf(String name)
功能:
    * 返回帶有指定名稱的該類型的枚舉常量。
    * 字符串必須與用于聲明該類型的枚舉常量的標(biāo)識(shí)符完全匹配。(不允許有多余的空格。) 
參數(shù):
    * 指定要返回的枚舉常量的名稱。 - 
返回:
    * 返回帶有指定名稱的枚舉常量 
拋出: 
    * IllegalArgumentException-如果該枚舉類型沒有帶有指定名稱的常量
4.03 values()
方法:
    * public static final Modifier[] values()
功能:
    * 按照聲明的順序返回一個(gè)包含此枚舉類型常量的數(shù)組。 此方法可用于迭代常量,如下所示: 
      for(Modifier c : Modifier.values()){
            System.out.println(c);
      }
返回:
    * 包含此枚舉類型常量的數(shù)組,按聲明的順序排列
九、反射 1. 概述

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語(yǔ)言的反射機(jī)制。

要想解剖一個(gè)類,必須先要獲取到該類的字節(jié)碼文件對(duì)象。而解剖使用的就是Class類對(duì)象。從而得到其中的方法或成員.所以先要獲取到每一個(gè)字節(jié)碼文件對(duì)應(yīng)的Class類型的對(duì)象.

2. 獲取Class類型的對(duì)象的方法

方式一

Person p = new Person();
Class clazz = p.getClass();

方式二

Class clazz = Person.class;

方式三

Class clazz = Class.forName("com.chenlianyuan.Person");
3. 通過反射獲取構(gòu)造方法并使用

獲取公共的指定的構(gòu)造方法

Constructor getConstructor(Class... parameterTypes)

獲取所有的公共的構(gòu)造方法

Constructor[] getConstructors()

獲取任意一個(gè)指定的構(gòu)造方法(包括私有)

Constructor getDeclaredConstructor(Class... parameterTypes)

獲取該類中所有聲明的構(gòu)造方法

Constructor[] getDeclaredConstructors()
4. 通過反射獲取成員變量并使用 5. 通過反射獲取成員方法并使用

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75887.html

相關(guān)文章

  • Java反射詳細(xì)介紹

    摘要:通過反射獲取帶參無返回值成員方法并使用設(shè)置安全檢查,訪問私有構(gòu)造函數(shù)必須創(chuàng)建實(shí)例這種不行,注意和方法需要傳遞參數(shù)測(cè)試復(fù)制這個(gè)功能獲取私有方法,同樣注意和的區(qū)別賦予訪問權(quán)限調(diào)用方法。 反射 目錄介紹 1.反射概述 1.1 反射概述 1.2 獲取class文件對(duì)象的三種方式 1.3 反射常用的方法介紹 1.4 反射的定義 1.5 反射的組成 1.6 反射的作用有哪些 2.反射的...

    ingood 評(píng)論0 收藏0
  • Java學(xué)習(xí)路線總結(jié),搬磚工逆襲Java架構(gòu)師(全網(wǎng)最強(qiáng))

    摘要:哪吒社區(qū)技能樹打卡打卡貼函數(shù)式接口簡(jiǎn)介領(lǐng)域優(yōu)質(zhì)創(chuàng)作者哪吒公眾號(hào)作者架構(gòu)師奮斗者掃描主頁(yè)左側(cè)二維碼,加入群聊,一起學(xué)習(xí)一起進(jìn)步歡迎點(diǎn)贊收藏留言前情提要無意間聽到領(lǐng)導(dǎo)們的談話,現(xiàn)在公司的現(xiàn)狀是碼農(nóng)太多,但能獨(dú)立帶隊(duì)的人太少,簡(jiǎn)而言之,不缺干 ? 哪吒社區(qū)Java技能樹打卡?【打卡貼 day2...

    Scorpion 評(píng)論0 收藏0
  • Reflection:Java反射機(jī)制基礎(chǔ)

    摘要:反射機(jī)制是什么反射機(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ì)象的方法的功能稱為語(yǔ)言的反射機(jī)制反射機(jī)制能做什么反射機(jī)制主要提供了以下功 反射機(jī)制是什么 反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法和屬性;這種...

    hizengzeng 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<