摘要:如果此對象表示非靜態(tài)上下文中聲明的內(nèi)部類,則形參類型作為第一個參數(shù)包括顯示封閉的實例。參數(shù)字段名返回此類中指定字段的對象拋出如果找不到帶有指定名稱的字段。
一、類的加載 1. 概述
當程序要使用某個類時,如果該類還未被加載到內(nèi)存中,則系統(tǒng)會通過加載,連接,初始化三步來實現(xiàn)對這個類進行初始化
2. 加載就是指將class文件讀入內(nèi)存,并為之創(chuàng)建一個Class對象
任何類被使用時系統(tǒng)都會建立一個Class對象——字節(jié)碼文件對象
3. 連接驗證——確保被加載類的正確性
準備——負責為類的靜態(tài)成員分配內(nèi)存,并設(shè)置默認初始化值,給給對象分配空間
解析——將類中的符號引用替換為直接引用
4.初始化就是以前講過的初始化步驟
5. 類的加載時機創(chuàng)建類的實例
訪問類的靜態(tài)變量
調(diào)用類的靜態(tài)方法
使用反射方式來強制創(chuàng)建某個類或接口對應(yīng)的java.lang.Class對象
初始化某個類的子類,子類父類都加載
直接使用java.exe命令來運行某個主類
二、類加載器 1. 概述負責將.class文件加載到內(nèi)存中,并為之生成對應(yīng)的Class對象
2. 類加載器的組成Bootstrap ClassLoader——根類加載器
Extension ClassLoader——擴展類加載器
System ClassLoader——系統(tǒng)類加載器
3.Bootstrap ClassLoader的作用Bootstrap ClassLoader——根類加載器,也被稱為引導(dǎo)類加載器,負責Java核心類的加載,比如System,String等。
在JDK中JRE的lib目錄下rt.jar文件中
4.Extension ClassLoader的作用Extension ClassLoader——擴展類加載器,負責JRE的擴展目錄中jar包的加載。
在JDK中JRE的lib目錄下ext目錄。
5.System ClassLoader的作用System ClassLoader——系統(tǒng)類加載器,負責在JVM啟動時加載來自java命令的class文件。
三、Class類 1. Class類的全稱public final class Class2. Class類的概述extends Object implements Serializable, GenericDeclaration, Type, AnnotatedElement
Java程序在運行時,Java運行時系統(tǒng)一直對所有的對象進行所謂的運行時類型標識。
這項信息紀錄了每個對象所屬的類。
虛擬機通常使用運行時類型信息選準正確方法去執(zhí)行,用來保存這些類型信息的類是Class類。
Class類封裝一個對象和接口運行時的狀態(tài),當裝載類時,Class類型的對象自動創(chuàng)建。
Class 沒有公共構(gòu)造方法。Class對象是在加載類時由Java 虛擬機以及通過調(diào)用類加載器中的defineClass 方法自動構(gòu)造的,因此不能顯式地聲明一個Class對象。
基本的 Java 類型(boolean、byte、char、short、int、long、float 和 double)和關(guān)鍵字 void 也都對應(yīng)一個 Class 對象。
每個數(shù)組屬于被映射為Class對象的一個類,所有具有相同元素類型和維數(shù)的數(shù)組都共享該Class對象。
一般某個類的Class對象被載入內(nèi)存,它就用來創(chuàng)建這個類的所有對象。
3. Class類的構(gòu)造方法無公共的構(gòu)造方法4. Class類的成員方法 4.01 getConstructor(Class>... parameterTypes)
方法: * public Constructor4.02 getConstructors()getConstructor(Class>... parameterTypes) throws NoSuchMethodException,SecurityException 功能: * 返回一個Constructor對象,它反映此Class對象所表示的類的指定公共構(gòu)造方法。 * parameterTypes參數(shù)是Class對象的一個數(shù)組,這些Class對象按聲明順序標識構(gòu)造方法的形參類型。 * 如果此Class對象表示非靜態(tài)上下文中聲明的內(nèi)部類,則形參類型作為第一個參數(shù)包括顯示封閉的實例。 * 要反映的構(gòu)造方法是此Class對象所表示的類的公共構(gòu)造方法,其形參類型與parameterTypes所指定的參數(shù)類型相匹配。 參數(shù): * parameterTypes-參數(shù)數(shù)組 返回: * 與指定的parameterTypes相匹配的公共構(gòu)造方法的Constructor對象 拋出: * NoSuchMethodException-如果找不到匹配的方法。 * SecurityException-如果存在安全管理器s,并滿足下列任一條件: * 調(diào)用s.checkMemberAccess(this, Member.PUBLIC)拒絕訪問構(gòu)造方法 * 調(diào)用者的類加載器不同于也不是當前類的類加載器的一個祖先,并且對s.checkPackageAccess()的調(diào)用拒絕訪問該類的包
方法: * public Constructor>[] getConstructors() throws SecurityException 功能: * 返回一個包含某些Constructor對象的數(shù)組,這些對象反映此Class對象所表示的類的所有公共構(gòu)造方法。 * 如果該類沒有公共構(gòu)造方法,或者該類是一個數(shù)組類,或者該類反映一個基本類型或void,則返回一個長度為0的 數(shù)組。 * 此方法返回Constructor4.03 getDeclaredConstructor(Class>... parameterTypes)對象的數(shù)組(即取自此類構(gòu)造方法的數(shù)組)時,此方法的返回類型 Constructor>[],不是預(yù)期的Constructor []。 * 此少量信息的返回類型是必需的,因為從此方法返回之后,該數(shù)組可能被修改以保存不同類的Constructor對 象,而這將違反Constructor []的類型保證。 返回: * 表示此類公共構(gòu)造方法的Constructor對象數(shù)組 拋出: * SecurityException-如果存在安全管理器s,并滿足下列任一條件: * 調(diào)用s.checkMemberAccess(this, Member.PUBLIC)拒絕訪問該類中的構(gòu)造方法 * 調(diào)用者的類加載器不同于也不是當前類的類加載器的一個祖先,并且對s.checkPackageAccess()的調(diào)用 拒絕訪問該類的包
方法: * public Constructor4.04 getDeclaredConstructors()getDeclaredConstructor(Class>... parameterTypes) throws NoSuchMethodException,SecurityException 功能: * 返回一個Constructor對象,該對象反映此Class對象所表示的類或接口的指定構(gòu)造方法。 * parameterTypes參數(shù)是Class對象的一個數(shù)組,它按聲明順序標識構(gòu)造方法的形參類型。 * 如果此Class對象表示非靜態(tài)上下文中聲明的內(nèi)部類,則形參類型作為第一個參數(shù)包括顯示封閉的實例。 參數(shù): * parameterTypes-參數(shù)數(shù)組 返回: * 帶有指定參數(shù)列表的構(gòu)造方法的Constructor對象 拋出: * NoSuchMethodException-如果找不到匹配的方法。 * SecurityException-如果存在安全管理器s,并滿足下列任一條件: * 調(diào)用s.checkMemberAccess(this, Member.DECLARED)拒絕訪問已聲明的構(gòu)造方法 * 調(diào)用者的類加載器不同于也不是當前類的類加載器的一個祖先,并且對s.checkPackageAccess()的調(diào)用 拒絕訪問該類的包
方法: * public Constructor>[] getDeclaredConstructors() throws SecurityException 功能: * 返回Constructor對象的一個數(shù)組,這些對象反映此Class對象表示的類聲明的所有構(gòu)造方法。 * 它們是公共、保護、默認(包)訪問和私有構(gòu)造方法。 * 返回數(shù)組中的元素沒有排序,也沒有任何特定的順序。 * 如果該類存在一個默認構(gòu)造方法,則它包含在返回的數(shù)組中。 * 如果此Class對象表示一個接口、一個基本類型、一個數(shù)組類或void,則此方法返回一個長度為0的數(shù)組。 返回: * 表示此類所有已聲明的構(gòu)造方法的Constructor對象的數(shù)組 拋出: * SecurityException-如果存在安全管理器s,并滿足下列任一條件: * 調(diào)用s.checkMemberAccess(this, Member.DECLARED)拒絕訪問該類中已聲明的構(gòu)造方法 * 調(diào)用者的類加載器不同于也不是當前類的類加載器的一個祖先,并且對s.checkPackageAccess()的調(diào)用 拒絕訪問此類的包4.05 getField(String name)
方法: * public Field getField(String name) throws NoSuchFieldException,SecurityException 功能: * 返回一個Field對象,它反映此Class對象所表示的類或接口的指定公共成員字段。 * name 參數(shù)是一個 String,用于指定所需字段的簡稱。 要反映的字段由下面的算法確定。設(shè) C 為此對象所表示的類: 如果 C 聲明一個帶有指定名的公共字段,則它就是要反映的字段。 如果在第 1 步中沒有找到任何字段,則該算法被遞歸地應(yīng)用于 C 的每一個直接超接口。直接超接口按其聲明順序進行搜索。 如果在第 1、2 兩步?jīng)]有找到任何字段,且 C 有一個超類 S,則在 S 上遞歸調(diào)用該算法。如果 C 沒有超類,則拋出 NoSuchFieldException。 請參閱 Java Language Specification 的第 8.2 和 8.3 節(jié)。 參數(shù): * name-字段名 返回: * 由name指定的該類的Field對象 拋出: * NoSuchFieldException-如果沒有找到帶有指定名的字段。 * NullPointerException-如果name為null * SecurityException-如果存在安全管理器s,并滿足下列任一條件: * 調(diào)用s.checkMemberAccess(this, Member.PUBLIC)拒絕訪問字段 * 調(diào)用者的類加載器不同于也不是當前類的類加載器的一個祖先,并且對s.checkPackageAccess()的調(diào)用 拒絕訪問該類的包4.06 getFields()
方法: * public Field[] getFields() throws SecurityException 功能: * 返回一個包含某些 Field 對象的數(shù)組,這些對象反映此 Class 對象所表示的類或接口的所有可訪問公共字段。返回數(shù)組中的元素沒有排序,也沒有任何特定的順序。如果類或接口沒有可訪問的公共字段,或者表示一個數(shù)組類、一個基本類型或 void,則此方法返回長度為 0 的數(shù)組。 特別地,如果該 Class 對象表示一個類,則此方法返回該類及其所有超類的公共字段。如果該 Class 對象表示一個接口,則此方法返回該接口及其所有超接口的公共字段。 該方法不反映數(shù)組類的隱式長度字段。用戶代碼應(yīng)使用 Array 類的方法來操作數(shù)組。 請參閱 Java Language Specification 的第 8.2 和 8.3 節(jié)。 返回: 表示公共字段的 Field 對象的數(shù)組 拋出: SecurityException - 如果存在安全管理器 s,并滿足下列任一條件: 調(diào)用 s.checkMemberAccess(this, Member.PUBLIC) 拒絕訪問該類中的字段 調(diào)用者的類加載器不同于也不是當前類的類加載器的一個祖先,并且對 s.checkPackageAccess() 的調(diào)用拒絕訪問該類的包4.07 getDeclaredField()
public Field getDeclaredField(String name) throws NoSuchFieldException, SecurityException返回一個 Field 對象,該對象反映此 Class 對象所表示的類或接口的指定已聲明字段。name 參數(shù)是一個 String,它指定所需字段的簡稱。注意,此方法不反映數(shù)組類的 length 字段。 參數(shù): name - 字段名 返回: 此類中指定字段的 Field 對象 拋出: NoSuchFieldException - 如果找不到帶有指定名稱的字段。 NullPointerException - 如果 name 為 null SecurityException - 如果存在安全管理器 s,并滿足下列任一條件: 調(diào)用 s.checkMemberAccess(this, Member.DECLARED) 拒絕訪問已聲明字段 調(diào)用者的類加載器不同于也不是當前類的類加載器的一個祖先,并且對 s.checkPackageAccess() 的調(diào)用拒絕訪問該類的包4.08 getDeclaredFields()
public Field[] getDeclaredFields() throws SecurityException返回 Field 對象的一個數(shù)組,這些對象反映此 Class 對象所表示的類或接口所聲明的所有字段。包括公共、保護、默認(包)訪問和私有字段,但不包括繼承的字段。返回數(shù)組中的元素沒有排序,也沒有任何特定的順序。如果該類或接口不聲明任何字段,或者此 Class 對象表示一個基本類型、一個數(shù)組類或 void,則此方法返回一個長度為 0 的數(shù)組。 請參閱 Java Language Specification 的第 8.2 和 8.3 節(jié)。 返回: 表示此類所有已聲明字段的 Field 對象的數(shù)組 拋出: SecurityException - 如果存在安全管理器 s,并滿足下列任一條件: 調(diào)用 s.checkMemberAccess(this, Member.DECLARED) 拒絕訪問此類中已聲明的字段 調(diào)用者的類加載器不同于也不是當前類的類加載器的一個祖先,并且對 s.checkPackageAccess() 的調(diào)用拒絕訪問該類的包4.09 getMethod()
public Method getMethod(String name, Class>... parameterTypes) throws NoSuchMethodException, SecurityException返回一個 Method 對象,它反映此 Class 對象所表示的類或接口的指定公共成員方法。name 參數(shù)是一個 String,用于指定所需方法的簡稱。parameterTypes 參數(shù)是按聲明順序標識該方法形參類型的 Class 對象的一個數(shù)組。如果 parameterTypes 為 null,則按空數(shù)組處理。 如果 name 是 "4.10 getMethods();" 或 " ",則將引發(fā) NoSuchMethodException。否則,要反映的方法由下面的算法確定(設(shè) C 為此對象所表示的類): 在 C 中搜索任一匹配的方法。如果找不到匹配的方法,則將在 C 的超類上遞歸調(diào)用第 1 步算法。 如果在第 1 步中沒有找到任何方法,則在 C 的超接口中搜索匹配的方法。如果找到了這樣的方法,則反映該方法。 在 C 類中查找匹配的方法:如果 C 正好聲明了一個具有指定名稱的公共方法并且恰恰有相同的形參類型,則它就是反映的方法。如果在 C 中找到了多個這樣的方法,并且其中有一個方法的返回類型比其他方法的返回類型都特殊,則反映該方法;否則將從中任選一個方法。 注意,類中可以有多個匹配方法,因為盡管 Java 語言禁止類聲明帶有相同簽名但不同返回類型的多個方法,但 Java 虛擬機并不禁止。這增加了虛擬機的靈活性,可以用來實現(xiàn)各種語言特性。例如,可以使用橋方法 (brige method)實現(xiàn)協(xié)變返回;橋方法以及將被重寫的方法將具有相同的簽名,不同的返回類型。 請參閱Java 語言規(guī)范 第 8.2 和 8.4 節(jié)。 參數(shù): name - 方法名 parameterTypes - 參數(shù)列表 返回: 與指定的 name 和 parameterTypes 匹配的 Method 對象 拋出: NoSuchMethodException - 如果找不到匹配的方法,或者方法名為 " " 或 " " NullPointerException - 如果 name 為 null SecurityException - 如果存在安全管理器 s,并滿足下列任一條件: 調(diào)用 s.checkMemberAccess(this, Member.PUBLIC) 拒絕訪問方法 調(diào)用者的類加載器不同于也不是當前類的類加載器的一個祖先,并且對 s.checkPackageAccess() 的調(diào)用拒絕訪問該類的包
方法: * public Method[] getMethods() throws SecurityException 功能: * 返回一個包含某些 Method 對象的數(shù)組,這些對象反映此 Class 對象所表示的類或接口(包括那些由該類或接口聲明的以及從超類和超接口繼承的那些的類或接口)的公共 member 方法。數(shù)組類返回從 Object 類繼承的所有(公共)member 方法。返回數(shù)組中的元素沒有排序,也沒有任何特定的順序。如果此 Class 對象表示沒有公共成員方法的類或接口,或者表示一個基本類型或 void,則此方法返回長度為 0 的數(shù)組。 類初始化方法4.11 getDeclaredMethod()不包含在返回的數(shù)組中。如果類聲明了帶有相同參數(shù)類型的多個公共成員方法,則它們都會包含在返回的數(shù)組中。 請參閱 Java Language Specification 的第 8.2 和 8.4 節(jié)。 返回: 表示此類中公共方法的 Method 對象的數(shù)組 拋出: SecurityException - 如果存在安全管理器 s,并滿足下列任一條件: 調(diào)用 s.checkMemberAccess(this, Member.PUBLIC) 拒絕訪問該類中的方法 調(diào)用者的類加載器不同于也不是當前類的類加載器的一個祖先,并且對 s.checkPackageAccess() 的調(diào)用拒絕訪問該類的包
public Method getDeclaredMethod(String name, Class>... parameterTypes) throws NoSuchMethodException, SecurityException返回一個 Method 對象,該對象反映此 Class 對象所表示的類或接口的指定已聲明方法。name 參數(shù)是一個 String,它指定所需方法的簡稱,parameterTypes 參數(shù)是 Class 對象的一個數(shù)組,它按聲明順序標識該方法的形參類型。如果在某個類中聲明了帶有相同參數(shù)類型的多個方法,并且其中有一個方法的返回類型比其他方法的返回類型都特殊,則返回該方法;否則將從中任選一個方法。如果名稱是 "4.12 getDeclaredMethods()” 或 “ ",則引發(fā)一個 NoSuchMethodException。 參數(shù): name - 方法名 parameterTypes - 參數(shù)數(shù)組 返回: 該類與指定名和參數(shù)相匹配的方法的 Method 對象 拋出: NoSuchMethodException - 如果找不到匹配的方法。 NullPointerException - 如果 name 為 null SecurityException - 如果存在安全管理器 s,并滿足下列任一條件: 調(diào)用 s.checkMemberAccess(this, Member.DECLARED) 拒絕訪問已聲明方法 調(diào)用者的類加載器不同于也不是當前類的類加載器的一個祖先,并且對 s.checkPackageAccess() 的調(diào)用拒絕訪問該類的包
方法: * public Method[] getDeclaredMethods() throws SecurityException 功能: * 返回 Method 對象的一個數(shù)組,這些對象反映此 Class 對象表示的類或接口聲明的所有方法,包括公共、保護、默認(包)訪問和私有方法,但不包括繼承的方法。返回數(shù)組中的元素沒有排序,也沒有任何特定的順序。如果該類或接口不聲明任何方法,或者此 Class 對象表示一個基本類型、一個數(shù)組類或 void,則此方法返回一個長度為 0 的數(shù)組。類初始化方法四、Constructor類 1. Constructor類的全稱不包含在返回數(shù)組中。如果該類聲明帶有相同參數(shù)類型的多個公共成員方法,則它們都包含在返回的數(shù)組中。 請參閱 Java Language Specification 第 8.2 節(jié)。 返回: 表示此類所有聲明方法的 Method 對象的數(shù)組 拋出: SecurityException - 如果存在安全管理器 s,并滿足下列任一條件: 調(diào)用 s.checkMemberAccess(this, Member.DECLARED) 拒絕訪問該類中已聲明的方法 調(diào)用者的類加載器不同于也不是當前類的類加載器的一個祖先,并且對 s.checkPackageAccess() 的調(diào)用拒絕訪問該類的包
public final class Constructor2. Constructor類的概述 3. Constructor類的構(gòu)造方法 4. Constructor類的成員方法 4.01 equals(Object obj)extends AccessibleObject implements GenericDeclaration, Member
方法: * public boolean equals(Object obj) 功能: * 將此Constructor對象與指定的對象進行比較。 * 如果對象相同,則返回true。 * 如果由相同的類聲明并且具有相同的形參類型,那么這兩個Constructor對象是相同的。 重寫: * 類Object中的equals 參數(shù): * obj-要與之比較的引用對象。 返回: * 如果此對象與obj參數(shù)相同,則返回true;否則返回false。4.02 getAnnotation(Class
方法: * public4.03 getDeclaredAnnotations()T getAnnotation(Class annotationClass) 功能: * 如果存在該元素的指定類型的注釋,則返回這些注釋,否則返回null。 指定者: * AnnotatedElement接口中的getAnnotation, Constructor類繼承AccessibleObject類, AccessibleObject類實現(xiàn)了AnnotatedElement接口。 覆蓋: * 類AccessibleObject中的getAnnotation 參數(shù): * annotationClass-對應(yīng)于注釋類型的Class對象 返回: * 如果該元素的指定注釋類型的注釋存在于此對象上,則返回這些注釋,否則返回null 拋出: * NullPointerException-如果給定的注釋類為null
方法: * public Annotation[] getDeclaredAnnotations() 功能: * 返回直接存在于此元素上的所有注釋。 * 與此接口中的其他方法不同,該方法將忽略繼承的注釋。 如果沒有注釋直接存在于此元素上,則返回長度為零的一個數(shù)組。 * 該方法的調(diào)用者可以隨意修改返回的數(shù)組;這不會對其他調(diào)用者返回的數(shù)組產(chǎn)生任何影響。 指定者: * 接口AnnotatedElement中的getDeclaredAnnotations 覆蓋: * 類AccessibleObject中的getDeclaredAnnotations 返回: * 直接存在于此元素上的所有注釋4.04 getDeclaringClass()
方法: * public Class4.05 getExceptionTypes()getDeclaringClass() 功能: * 返回Class對象,該對象表示聲明由此Constructor對象表示的構(gòu)造方法的類。 指定者: * 接口Member中的getDeclaringClass 返回: * 表示聲明底層成員的類的對象
方法: * public Class>[] getExceptionTypes() 功能: * 返回一組表示聲明要拋出的異常類型的Class對象,這些異常是由此對象表示的底層構(gòu)造方法拋出的。 * 如果該構(gòu)造方法聲明其 throws 子句中沒有任何異常,則返回一個長度為 0 的數(shù)組。 返回: * 聲明由此對象表示的構(gòu)造方法拋出的異常類型4.06 getGenericExceptionTypes()
方法: * public Type[] getGenericExceptionTypes() 功能: * 返回一組Type對象,這些對象表示聲明要由此Constructor對象拋出的異常。 * 如果底層方法聲明其throws子句中沒有任何異常,則返回一個長度為0的數(shù)組。 * 如果異常類型是一個參數(shù)化類型,那么為它返回的Type對象必須準確地反映源代碼中使用的實際類型參數(shù)。 * 如果異常的類型是一個類型變量或是一個參數(shù)化類型,則創(chuàng)建它。否則將解析它。 返回: * 表示底層方法拋出的異常類型的一組Type對象 拋出: * TypeNotPresentException-如果底層方法的throws子句引用了不存在的類型聲明4.07 getGenericParameterTypes()
方法: * public Type[] getGenericParameterTypes() 功能: * 按照聲明順序返回一組 Type 對象,這些對象表示此 Constructor 對象所表示的方法的形參類型。如果底層方法不帶任何參數(shù),則返回一個長度為 0 的數(shù)組。 如果形參類型是一個參數(shù)化類型,那么為它返回的 Type 對象必須準確地反映源代碼中使用的實際類型參數(shù)。 如果形參類型是一個類型變量或者是一個參數(shù)化類型,則創(chuàng)建它。否則將解析它。 返回: 按照聲明順序返回一組 Type 對象,該對象表示底層方法的形參類型 拋出: GenericSignatureFormatError - 如果這個一般方法的簽名不符合 Java Virtual Machine Specification, 3rd edition 指定的格式 TypeNotPresentException - 如果任何底層方法的參數(shù)類型引用了不存在的類型聲明 MalformedParameterizedTypeException - 如果任何底層方法的參數(shù)類型引用了因某種原因而無法實例化的參數(shù)化類型4.08 getModifiers()
public int getModifiers()以整數(shù)形式返回此 Constructor 對象所表示構(gòu)造方法的 Java 語言修飾符。應(yīng)該使用 Modifier 類對這些修飾符進行解碼。 指定者: 接口 Member 中的 getModifiers 返回: 底層成員的 Java 語言修飾符4.09 getName()
方法: * public String getName() 功能: * 以字符串形式返回此構(gòu)造方法的名稱。 * 它總是與構(gòu)造方法的聲明類的簡單名稱相同。 指定者: * 接口Member中的getName 返回: * 底層成員的簡單名稱4.10 getParameterAnnotations()
public Annotation[][] getParameterAnnotations()按照聲明順序返回一組數(shù)組,這些數(shù)組表示通過此 Constructor 對象表示的方法的形參上的注釋。(如果底層方法沒有參數(shù),則返回一個長度為零的數(shù)組。如果該方法有一個或多個參數(shù),則為每個不帶注釋的參數(shù)返回一個長度為零的嵌套數(shù)組。)包含在返回數(shù)組中的注釋對象是可序列化的。此方法的調(diào)用者可以自由地修改返回的數(shù)組;它對返回給其他調(diào)用者的數(shù)組沒有影響。 返回: 按照聲明順序返回的一組數(shù)組,這些數(shù)組表示此 Constructor 對象表示的方法的形參上的注釋4.11 getParameterTypes()
public Class>[] getParameterTypes()按照聲明順序返回一組 Class 對象,這些對象表示此 Constructor 對象所表示構(gòu)造方法的形參類型。如果底層構(gòu)造方法不帶任何參數(shù),則返回一個長度為 0 的數(shù)組。 返回: 此對象表示的構(gòu)造方法的參數(shù)類型4.12 getTypeParameters()
public TypeVariable4.13 hashCode()>[] getTypeParameters()按照聲明順序返回一組 TypeVariable 對象,這些對象表示通過此 GenericDeclaration 對象所表示的一般聲明來聲明的類型變量。如果底層一般聲明未聲明任何類型的變量,則返回一個長度為 0 的數(shù)組。 指定者: 接口 GenericDeclaration 中的 getTypeParameters 返回: 表示通過此一般聲明來聲明的類型變量的一組 TypeVariable 對象 拋出: GenericSignatureFormatError - 如果此一般聲明的一般簽名不符合 Java Virtual Machine Specification, 3rd edition 指定的格式
public int hashCode()返回此 Constructor 的哈希碼。該哈希碼與底層構(gòu)造方法的聲明類名的哈希碼相同。 覆蓋: 類 Object 中的 hashCode 返回: 此對象的一個哈希碼值。4.14 isSynthetic()
public boolean isSynthetic()如果此構(gòu)造方法是一個復(fù)合構(gòu)造方法,則返回 true;否則返回 false。 指定者: 接口 Member 中的 isSynthetic 返回: 當且僅當此構(gòu)造方法是按照 Java Language Specification 定義的復(fù)合構(gòu)造方法時才返回 true。4.15 isVarArgs()
方法: * public boolean isVarArgs() 功能: * 如果聲明此構(gòu)造方法可以帶可變數(shù)量的參數(shù),則返回true;否則返回false。 返回: * 當且僅當聲明此構(gòu)造方法可以帶可變數(shù)量的參數(shù)時才返回true。4.16 newInstance(Object... initargs)
方法: * public T newInstance(Object... initargs) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException 功能: * 使用此 Constructor 對象表示的構(gòu)造方法來創(chuàng)建該構(gòu)造方法的聲明類的新實例,并用指定的初始化參數(shù)初始化該實例。個別參數(shù)會自動解包,以匹配基本形參,必要時,基本參數(shù)和引用參數(shù)都要進行方法調(diào)用轉(zhuǎn)換。 如果底層構(gòu)造方法所需形參數(shù)為 0,則所提供的 initargs 數(shù)組的長度可能為 0 或 null。 如果構(gòu)造方法的聲明類是非靜態(tài)上下文的內(nèi)部類,則構(gòu)造方法的第一個參數(shù)需要是封閉實例;請參閱Java 語言規(guī)范 第 15.9.3 節(jié)。 如果所需的訪問檢查和參數(shù)檢查獲得成功并且實例化繼續(xù)進行,這時構(gòu)造方法的聲明類尚未初始化,則初始化這個類。 如果構(gòu)造方法正常完成,則返回新創(chuàng)建且已初始化的實例。 參數(shù): initargs - 將作為變量傳遞給構(gòu)造方法調(diào)用的對象數(shù)組;基本類型的值被包裝在適當類型的包裝器對象(如 Float 中的 float)中。 返回: 通過調(diào)用此對象表示的構(gòu)造方法來創(chuàng)建的新對象 拋出: IllegalAccessException - 如果此 Constructor 對象實施 Java 語言訪問控制并且底層構(gòu)造方法是不可訪問的。 IllegalArgumentException - 如果實參和形參的數(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ù)(如果有)的加尖括號的、逗號分隔的列表,再往后是聲明類的完全限定名,再往后是該構(gòu)造方法的一般形參類型的加括號的、逗號分隔的列表。空格用來分隔訪問修飾符與訪問修飾符,以及訪問修飾符與類型參數(shù)或返回值。如果沒有類型參數(shù),則省略類型參數(shù)列表;如果存在類型參數(shù)列表,則用空格分隔列表與類名。如果聲明構(gòu)造方法拋出異常,則參數(shù)列表后跟著一個空格,再往后是單詞 "throws" ,再往后是用逗號分隔的所拋出異常類型的列表。 構(gòu)造方法唯一可能的修飾符是訪問修飾符 public、protected 或 private。這些修飾符只能出現(xiàn)一個,或者一個也不出現(xiàn)(如果構(gòu)造方法具有默認(包)訪問權(quán))。 返回: 描述此 Constructor 的字符串,其中包括類型參數(shù)4.18 toString()
方法: * public String toString() 功能: * 返回描述此Constructor的字符串。 * 該字符串是作為構(gòu)造方法訪問修飾符(如果有)格式化的,其后面是聲明類的完全限定名,再往后是構(gòu)造方法形參 類型的加括號的、逗號分隔的列表。 * 構(gòu)造方法唯一可能的修飾符是訪問修飾符 public、protected 或 private。 * 這些修飾符只能出現(xiàn)一個,或者一個也不出現(xiàn)(如果構(gòu)造方法具有默認(包)訪問權(quán))。 覆蓋: * 類Object中的toString。 返回: * 該對象的字符串表示形式。五、Field類 1. Field類的全稱
public final class Field extends AccessibleObject implements Member2. Field類的概述 3. Field類的構(gòu)造方法 4. Field類的成員方法 4.01 get()
方法: * public Object get(Object obj) throws IllegalArgumentException,IllegalAccessException 功能: * 返回指定對象上此Field表示的字段的值。 * 如果該值是一個基本類型值,則自動將其包裝在一個對象中。 * 底層字段的值是按以下方式獲得的: * 如果底層字段是一個靜態(tài)字段,則忽略 obj 變量;它可能為 null。 * 否則,底層字段是一個實例字段。如果指定的 obj 變量為 null,則該方法將拋出一個 NullPointerException。 如果指定對象不是聲明底層字段的類或接口的實例,則該方法將拋出一個 IllegalArgumentException。 如果此 Field 對象強制實施 Java 語言訪問控制,并且底層字段是不可訪問的,則該方法將拋出一個 IllegalAccessException。如果底層字段是靜態(tài)的,并且聲明該字段的類尚未初始化,則初始化這個類。 否則,從底層實例字段或靜態(tài)字段中獲取該值。如果該字段是一個基本類型字段,則在返回前將該值包裝在一個對象中,否則照原樣返回。 如果字段隱藏在 obj 的類型中,則根據(jù)前面的規(guī)則獲得字段的值。 參數(shù): * obj-從中提取所表示字段的值的對象 返回: * 對象 obj 中的所表示字段的值;在返回之前,基值包裝在一個適當?shù)膶ο笾? 拋出: * IllegalAccessException - 如果底層字段是不可訪問的。 * IllegalArgumentException - 如果指定對象不是聲明底層字段(或者其子類或?qū)崿F(xiàn)者)的類或接口的實例。 * NullPointerException - 如果指定對象為 null 并且字段是一個實例字段。 * ExceptionInInitializerError - 如果此方法引起的初始化失敗。4.02 getByte()
public byte getByte(Object obj) throws IllegalArgumentException, IllegalAccessException獲取一個靜態(tài)或?qū)嵗?byte 字段的值。 參數(shù): obj - 從中提取 byte 值的對象 返回: byte 字段的值 拋出: IllegalAccessException - 如果底層字段是不可訪問的。 IllegalArgumentException - 如果指定對象不是聲明底層字段(或者其子類或?qū)崿F(xiàn)者)的類或接口的實例,或者無法通過擴展轉(zhuǎn)換將字段值轉(zhuǎn)換為 byte 類型。 NullPointerException - 如果指定對象為 null 并且字段是一個實例字段。 ExceptionInInitializerError - 如果此方法引起的初始化失敗。4.03 getChar()
public char getChar(Object obj) throws IllegalArgumentException, IllegalAccessException獲取 char 類型或另一個通過擴展轉(zhuǎn)換可以轉(zhuǎn)換為 char 類型的基本類型的靜態(tài)或?qū)嵗侄蔚闹怠? 參數(shù): obj - 從中提取 char 值的對象 返回: 轉(zhuǎn)換為 char 類型的字段的值 拋出: IllegalAccessException - 如果底層字段是不可訪問的。 IllegalArgumentException - 如果指定對象不是聲明底層字段(或者其子類或?qū)崿F(xiàn)者)的類或接口的實例,或者無法通過擴展轉(zhuǎn)換將字段值轉(zhuǎn)換為 char 類型。 NullPointerException - 如果指定對象為 null 并且字段是一個實例字段。 ExceptionInInitializerError - 如果此方法引起的初始化失敗。4.04 set()
public void set(Object obj, Object value) throws IllegalArgumentException, IllegalAccessException將指定對象變量上此 Field 對象表示的字段設(shè)置為指定的新值。如果底層字段的類型為基本類型,則對新值進行自動解包。 進行此操作的方式如下: 如果底層字段是靜態(tài)字段,則忽略 obj 變量;它可能為 null。 否則底層字段是一個實例字段。如果指定對象變量為 null,則該方法將拋出一個 NullPointerException。如果指定對象變量不是聲明底層字段的類或接口的實例,則該方法將拋出一個 IllegalArgumentException。 如果此 Field 對象實施 Java 語言訪問控制,并且底層字段是不可訪問的,則該方法將拋出一個 IllegalAccessException。 如果底層字段為 final 字段,則該方法將拋出一個 IllegalAccessException,除非 setAccessible(true) 已經(jīng)繼承該字段并且該字段是一個非靜態(tài)字段。在通過程序的其他部分可以訪問類的實例之前,只有使用空白 final 字段反序列化或重構(gòu)類的實例期間,以這種方式設(shè)置 final 字段才有意義。在其他任何上下文中使用該方法都可能會有不可預(yù)知的結(jié)果,包括程序的其他部分繼續(xù)使用該字段的原始值的情況。 如果底層字段的類型為某一基本類型,則可以嘗試使用解包轉(zhuǎn)換將新值轉(zhuǎn)換為基本類型的值。如果該嘗試失敗,則此方法將拋出一個 IllegalArgumentException。 如果在進行可能的解包之后,無法通過某一標識或擴展轉(zhuǎn)換將新值轉(zhuǎn)換為底層字段的類型,則此方法將拋出一個 IllegalArgumentException。 如果底層字段是靜態(tài)的,并且聲明該字段的類尚未初始化,則初始化這個類。 字段被設(shè)置為可能已解包并擴大的新值。 如果字段隱藏在 obj 的類型中,則根據(jù)前面的規(guī)則設(shè)置字段的值。 參數(shù): obj - 應(yīng)該修改其字段的對象 value - 正被修改的 obj 的字段的新值 拋出: IllegalAccessException - 如果底層字段是不可訪問的。 IllegalArgumentException - 如果指定對象不是聲明底層字段(或者其子類或?qū)崿F(xiàn)者)的類或接口的實例,或者解包轉(zhuǎn)換失敗。 NullPointerException - 如果指定對象為 null 并且字段是一個實例字段。 ExceptionInInitializerError - 如果此方法引起的初始化失敗。4.05 setBoolean()
public void setBoolean(Object obj, boolean z) throws IllegalArgumentException, IllegalAccessException將字段的值設(shè)置為指定對象上的一個 boolean 值。該方法等同于 set(obj, zObj),其中 zObj 是一個 Boolean 對象,并且 zObj.booleanValue() == z。 參數(shù): obj - 應(yīng)該修改其字段的對象 z - 正被修改的 obj 的字段的新值 拋出: IllegalAccessException - 如果底層字段是不可訪問的。 IllegalArgumentException - 如果指定對象不是聲明底層字段(或者其子類或?qū)崿F(xiàn)者)的類或接口的實例,或者解包轉(zhuǎn)換失敗。 NullPointerException - 如果指定對象為 null 并且字段是一個實例字段。 ExceptionInInitializerError - 如果此方法引起的初始化失敗。4.06 setByte()
public void setByte(Object obj, byte b) throws IllegalArgumentException, IllegalAccessException將字段的值設(shè)置為指定對象上的一個 byte 值。該方法等同于 set(obj, bObj),其中 bObj 是一個 Byte 對象,并且 bObj.byteValue() == b。 參數(shù): obj - 應(yīng)該修改其字段的對象 b - 正被修改的 obj 的字段的新值 拋出: IllegalAccessException - 如果底層字段是不可訪問的。 IllegalArgumentException - 如果指定對象不是聲明底層字段(或者其子類或?qū)崿F(xiàn)者)的類或接口的實例,或者解包轉(zhuǎn)換失敗。 NullPointerException - 如果指定對象為 null 并且字段是一個實例字段。 ExceptionInInitializerError - 如果此方法引起的初始化失敗。4.07 getName()
方法: * public String getName()以 String 的形式返回此 Class 對象所表示的實體(類、接口、數(shù)組類、基本類型或 void)名稱。 如果此類對象表示的是非數(shù)組類型的引用類型,則返回該類的二進制名稱,Java Language Specification, Second Edition 對此作了詳細說明。 如果此類對象表示一個基本類型或 void,則返回的名字是一個與該基本類型或 void 所對應(yīng)的 Java 語言關(guān)鍵字相同的 String。 如果此類對象表示一個數(shù)組類,則名字的內(nèi)部形式為:表示該數(shù)組嵌套深度的一個或多個 "[" 字符加元素類型名。元素類型名的編碼如下: Element Type Encoding boolean Z byte B char C class or interface Lclassname; double D float F int I long J short S 類或接口名 classname 是上面指定類的二進制名稱。 示例: 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" 返回: 此對象所表示的類或接口名。4.08 getModifiers()
方法: * public int getModifiers() 功能: * 返回此類或接口以整數(shù)編碼的 Java 語言修飾符 * 修飾符由 Java 虛擬機的 public、protected、private、final、static、abstract和interface 對應(yīng)的常量組成;它們應(yīng)當使用 Modifier 類的方法來解碼。 * 如果底層類是數(shù)組類,則其 public、private 和 protected 修飾符與其組件類型的修飾符相同。如果此 Class 表示一個基本類型或 void,則其 public 修飾符始終為 true,protected 和 private 修飾符始終為 false。如果此對象表示一個數(shù)組類、一個基本類型或 void,則其 final 修飾符始終為 true,其接口修飾符始終為 false。該規(guī)范沒有給定其他修飾符的值。 返回: * 表示該類修飾符的int六、Method類 1. Method類的全稱
public final class Method extends AccessibleObject implements GenericDeclaration, Member2. Method類的概述 3. Method類的構(gòu)造方法
無4. Method類的成員方法 4.01 invoke()
方法: * public Object invoke(Object obj,Object... args) throws IllegalAccessException,IllegalArgumentException,InvocationTargetException 功能: * 對帶有指定參數(shù)的指定對象調(diào)用由此Method對象表示的底層方法。 * 個別參數(shù)被自動解包,以便與基本形參相匹配,基本參數(shù)和引用參數(shù)都隨需服從方法調(diào)用轉(zhuǎn)換。 * 如果底層方法是靜態(tài)的,那么可以忽略指定的obj參數(shù)。該參數(shù)可以為null。 * 如果底層方法所需的形參數(shù)為 0,則所提供的 args 數(shù)組長度可以為 0 或 null。 * 如果底層方法是實例方法,則使用動態(tài)方法查找來調(diào)用它,這一點記錄在 Java Language Specification, Second Edition 的第 15.12.4.4 節(jié)中;在發(fā)生基于目標對象的運行時類型的重寫時更應(yīng)該這樣做。 如果底層方法是靜態(tài)的,并且尚未初始化聲明此方法的類,則會將其初始化。 如果方法正常完成,則將該方法返回的值返回給調(diào)用者;如果該值為基本類型,則首先適當?shù)貙⑵浒b在對象中。但是,如果該值的類型為一組基本類型,則數(shù)組元素不 被包裝在對象中;換句話說,將返回基本類型的數(shù)組。如果底層方法返回類型為 void,則該調(diào)用返回 null。 參數(shù): * obj - 從中調(diào)用底層方法的對象 * args - 用于方法調(diào)用的參數(shù) 返回: * 使用參數(shù) args 在 obj 上指派該對象所表示方法的結(jié)果 拋出: * IllegalAccessException-如果此Method對象強制執(zhí)行Java語言訪問控制,并且底層方法是不可訪問的。 * IllegalArgumentException- 如果該方法是實例方法,且指定對象參數(shù)不是聲明底層方法的類或接口(或其中的子類或?qū)崿F(xiàn)程序)的實例; 如果實參和形參的數(shù)量不相同; 如果基本參數(shù)的解包轉(zhuǎn)換失敗; 如果在解包后,無法通過方法調(diào)用轉(zhuǎn)換將參數(shù)值轉(zhuǎn)換為相應(yīng)的形參類型。 * InvocationTargetException-如果底層方法拋出異常。 * NullPointerException-如果指定對象為null,且該方法是一個實例方法。 * ExceptionInInitializerError-如果由此方法引起的初始化失敗。4.02 getName()
方法: * public String getName() 功能: * 以String形式返回此Method對象表示的方法名稱 指定者: * 接口Member中的getName 返回: * 底層成員的簡單名稱4.03 getModifiers()
方法: * public int getModifiers() 功能: * 以整數(shù)形式返回此Method對象所表示方法的Java語言修飾符。 * 應(yīng)該使用 Modifier 類對修飾符進行解碼。 指定者: * 接口Member中的getModifiers 返回: * 底層成員的Java語言修飾符4.04 getReturnType()
方法: * public Class> getReturnType() 功能: * 返回一個Class對象,該對象描述了此Method對象所表示的方法的正式返回類型。 返回: * 此對象所表示的方法的返回類型4.05 getParameterTypes()
方法: * public Class>[] getParameterTypes() 功能: * 按照聲明順序返回Class對象的數(shù)組,這些對象描述了此Method對象所表示的方法的形參類型。 * 如果底層方法不帶參數(shù),則返回長度為0的數(shù)組。 返回: * 此對象所表示的方法的參數(shù)類型七、AccessibleObject類 1. AccessibleObject類的全稱
public class AccessibleObject extends Object implements AnnotatedElement2. AccessibleObject類的概述
AccessibleObject類是Field、Method 和 Constructor對象的基類。3. AccessibleObject類的構(gòu)造方法它提供了將反射的對象標記為在使用時取消默認 Java語言訪問控制檢查的能力。
對于公共成員、默認訪問成員、受保護成員和私有成員,在分別使用Field、Method 或Constructor 對象來設(shè)置或獲取字段、調(diào)用方法,或者創(chuàng)建和初始化類的新實例的時候,會執(zhí)行訪問檢查。
在反射對象中設(shè)置accessible標志允許具有足夠特權(quán)的復(fù)雜應(yīng)用程序(比如 Java Object Serialization 或其他持久性機制)以某種通常禁止使用的方式來操作對象。
protected AccessibleObject() 構(gòu)造方法:僅供 Java 虛擬機使用。4. AccessibleObject類的成員方法 4.01 getAnnotation(Class
public4.02 getAnnotations()T getAnnotation(Class annotationClass)從接口 AnnotatedElement 復(fù)制的描述 如果存在該元素的指定類型的注釋,則返回這些注釋,否則返回 null。 指定者: 接口 AnnotatedElement 中的 getAnnotation 參數(shù): annotationClass - 對應(yīng)于注釋類型的 Class 對象 返回: 如果該元素的指定注釋類型的注釋存在于此對象上,則返回這些注釋,否則返回 null 拋出: NullPointerException - 如果給定的注釋類為 null
public Annotation[] getAnnotations()從接口 AnnotatedElement 復(fù)制的描述 返回此元素上存在的所有注釋。(如果此元素沒有注釋,則返回長度為零的數(shù)組。)該方法的調(diào)用者可以隨意修改返回的數(shù)組;這不會對其他調(diào)用者返回的數(shù)組產(chǎn)生任何影響。 指定者: 接口 AnnotatedElement 中的 getAnnotations 返回: 此元素上存在的所有注釋4.03 getDeclaredAnnotations()
public Annotation[] getDeclaredAnnotations()從接口 AnnotatedElement 復(fù)制的描述 返回直接存在于此元素上的所有注釋。與此接口中的其他方法不同,該方法將忽略繼承的注釋。(如果沒有注釋直接存在于此元素上,則返回長度為零的一個數(shù)組。)該方法的調(diào)用者可以隨意修改返回的數(shù)組;這不會對其他調(diào)用者返回的數(shù)組產(chǎn)生任何影響。 指定者: 接口 AnnotatedElement 中的 getDeclaredAnnotations 返回: 直接存在于此元素上的所有注釋4.04 isAccessible()
public boolean isAccessible()獲取此對象的 accessible 標志的值。 返回: 此對象的 accessible 標志的值。4.05 isAnnotationPresent(Class extends Annotation>
public boolean isAnnotationPresent(Class extends Annotation> annotationClass)從接口 AnnotatedElement 復(fù)制的描述 如果指定類型的注釋存在于此元素上,則返回 true,否則返回 false。此方法主要是為了便于訪問標記注釋而設(shè)計的。 指定者: 接口 AnnotatedElement 中的 isAnnotationPresent 參數(shù): annotationClass - 對應(yīng)于注釋類型的 Class 對象 返回: 如果指定注釋類型的注釋存在于此對象上,則返回 true,否則返回 false 拋出: NullPointerException - 如果給定的注釋類為 null4.06 setAccessible(AccessibleObject[] array,boolean flag)
public static void setAccessible(AccessibleObject[] array,boolean flag) throws SecurityException使用單一安全性檢查(為了提高效率)為一組對象設(shè)置 accessible 標志的便捷方法。 首先,如果存在安全管理器,則在 ReflectPermission("suppressAccessChecks") 權(quán)限下調(diào)用 checkPermission 方法。 如果 flag 為 true,但是不能更改輸入 array 的任何元素的可訪問性(例如,如果元素對象是 Class 類的 Constructor 對象),則會引發(fā) SecurityException。如果發(fā)生 SecurityException,對于少于(不包括)發(fā)生異常的元素的數(shù)組元素,可以將對象的可訪問性設(shè)置為 flag;對于超出(包括)引發(fā)異常的元素的那些元素,則不更改其可訪問性。 參數(shù): array - AccessibleObjects 的數(shù)組 flag - 每個對象中的 accessible 標志的新值 拋出: SecurityException - 如果請求被拒絕。4.07 setAccessible(boolean flag)
public void setAccessible(boolean flag) throws SecurityException將此對象的 accessible 標志設(shè)置為指示的布爾值。值為 true 則指示反射的對象在使用時應(yīng)該取消 Java 語言訪問檢查。值為 false 則指示反射的對象應(yīng)該實施 Java 語言訪問檢查。 首先,如果存在安全管理器,則在 ReflectPermission("suppressAccessChecks") 權(quán)限下調(diào)用 checkPermission 方法。 如果 flag 為 true,并且不能更改此對象的可訪問性(例如,如果此元素對象是 Class 類的 Constructor 對象),則會引發(fā) SecurityException。 如果此對象是 java.lang.Class 類的 Constructor 對象,并且 flag 為 true,則會引發(fā) SecurityException。 參數(shù): flag - accessible 標志的新值 拋出: SecurityException - 如果請求被拒絕。八、Modifier類 1. Modifier類的全稱
public enum Modifier extends Enum2. 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 |
方法: * public String toString() 功能: * 返回此修飾符的小寫名稱。 覆蓋: * 類Enum4.02 valueOf(String name)中的toString 返回: * 枚舉常量的名稱
方法: * public static Modifier valueOf(String name) 功能: * 返回帶有指定名稱的該類型的枚舉常量。 * 字符串必須與用于聲明該類型的枚舉常量的標識符完全匹配。(不允許有多余的空格。) 參數(shù): * 指定要返回的枚舉常量的名稱。 - 返回: * 返回帶有指定名稱的枚舉常量 拋出: * IllegalArgumentException-如果該枚舉類型沒有帶有指定名稱的常量4.03 values()
方法: * public static final Modifier[] values() 功能: * 按照聲明的順序返回一個包含此枚舉類型常量的數(shù)組。 此方法可用于迭代常量,如下所示: for(Modifier c : Modifier.values()){ System.out.println(c); } 返回: * 包含此枚舉類型常量的數(shù)組,按聲明的順序排列九、反射 1. 概述
JAVA反射機制是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法。
對于任意一個對象,都能夠調(diào)用它的任意一個方法和屬性;這種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法的功能稱為java語言的反射機制。
要想解剖一個類,必須先要獲取到該類的字節(jié)碼文件對象。而解剖使用的就是Class類對象。從而得到其中的方法或成員.所以先要獲取到每一個字節(jié)碼文件對應(yīng)的Class類型的對象.
2. 獲取Class類型的對象的方法方式一
Person p = new Person(); Class clazz = p.getClass();
方式二
Class clazz = Person.class;
方式三
Class clazz = Class.forName("com.chenlianyuan.Person");3. 通過反射獲取構(gòu)造方法并使用
獲取公共的指定的構(gòu)造方法
ConstructorgetConstructor(Class>... parameterTypes)
獲取所有的公共的構(gòu)造方法
Constructor>[] getConstructors()
獲取任意一個指定的構(gòu)造方法(包括私有)
ConstructorgetDeclaredConstructor(Class>... parameterTypes)
獲取該類中所有聲明的構(gòu)造方法
Constructor>[] getDeclaredConstructors()4. 通過反射獲取成員變量并使用 5. 通過反射獲取成員方法并使用
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/75887.html
摘要:通過反射獲取帶參無返回值成員方法并使用設(shè)置安全檢查,訪問私有構(gòu)造函數(shù)必須創(chuàng)建實例這種不行,注意和方法需要傳遞參數(shù)測試復(fù)制這個功能獲取私有方法,同樣注意和的區(qū)別賦予訪問權(quán)限調(diào)用方法。 反射 目錄介紹 1.反射概述 1.1 反射概述 1.2 獲取class文件對象的三種方式 1.3 反射常用的方法介紹 1.4 反射的定義 1.5 反射的組成 1.6 反射的作用有哪些 2.反射的...
摘要:哪吒社區(qū)技能樹打卡打卡貼函數(shù)式接口簡介領(lǐng)域優(yōu)質(zhì)創(chuàng)作者哪吒公眾號作者架構(gòu)師奮斗者掃描主頁左側(cè)二維碼,加入群聊,一起學(xué)習(xí)一起進步歡迎點贊收藏留言前情提要無意間聽到領(lǐng)導(dǎo)們的談話,現(xiàn)在公司的現(xiàn)狀是碼農(nóng)太多,但能獨立帶隊的人太少,簡而言之,不缺干 ? 哪吒社區(qū)Java技能樹打卡?【打卡貼 day2...
摘要:反射機制是什么反射機制是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法對于任意一個對象,都能夠調(diào)用它的任意一個方法和屬性這種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法的功能稱為語言的反射機制反射機制能做什么反射機制主要提供了以下功 反射機制是什么 反射機制是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意一個方法和屬性;這種...
閱讀 953·2021-11-24 09:39
閱讀 2689·2021-09-26 09:55
閱讀 14154·2021-08-23 09:47
閱讀 3577·2019-08-30 15:52
閱讀 848·2019-08-29 13:49
閱讀 997·2019-08-23 18:00
閱讀 844·2019-08-23 16:42
閱讀 1635·2019-08-23 14:28