JavaTM 2 Platform
Standard Ed. 6

java.lang
類別 Class<T>

java.lang.Object
  繼承者 java.lang.Class<T>
型別參數:
T - 由此 Class 物件建模的類別的型別。例如,String.class 的型別是 Class<String>。如果將被建模的類別未知,則使用 Class<?>
所有已實作的介面:
Serializable, AnnotatedElement, GenericDeclaration, Type

public final class Class<T>
extends Object
implements Serializable, GenericDeclaration, Type, AnnotatedElement

Class 類別的實例表示正在運行的 Java 應用程序中的類別和介面。列舉是一種類別,註釋是一種介面。每個陣列屬於被映射為 Class 物件的一個類別,所有具有相同元素型別和維數的陣列都共享該 Class 物件。基本的 Java 型別(booleanbytecharshortintlongfloatdouble)和關鍵字 void 也表示為 Class 物件。

Class 沒有公共建構子。Class 物件是在載入類別時由 Java 虛擬機器以及通過調用類別載入器中的 defineClass 方法自動建構的。

以下範例使用 Class 物件來顯示物件的類別名:

     void printClassName(Object obj) {
         System.out.println("The class of " + obj +
                            " is " + obj.getClass().getName());
     }
 

還可以使用一個類別文字值(JLS Section 15.8.2)來獲取指定型別(或 void)的 Class 物件。例如:

     System.out.println("The name of class Foo is: "+Foo.class.getName());
 

從以下版本開始:
JDK1.0
另請參見:
ClassLoader.defineClass(byte[], int, int), 序列化表格

方法摘要
<U> Class<? extends U>
asSubclass(Class<U> clazz)
          強制轉換該 Class 物件,以表示指定的 class 物件所表示的類別的一個子類別。
 T cast(Object obj)
          將一個物件強制轉換成此 Class 物件所表示的類別或介面。
 boolean desiredAssertionStatus()
          如果要在調用此方法時將要初始化該類別,則返回將分派給該類別的斷言狀態。
static Class<?> forName(String className)
          返回與帶有給定字元串名的類別或介面相關聯的 Class 物件。
static Class<?> forName(String name, boolean initialize, ClassLoader loader)
          使用給定的類別載入器,返回與帶有給定字元串名的類別或介面相關聯的 Class 物件。
<A extends Annotation>
A
getAnnotation(Class<A> annotationClass)
          如果存在該元素的指定型別的註釋,則返回這些註釋,否則返回 null。
 Annotation[] getAnnotations()
          返回此元素上存在的所有註釋。
 String getCanonicalName()
          返回 Java Language Specification 中所定義的底層類別的規範化名稱。
 Class<?>[] getClasses()
          返回一個套件含某些 Class 物件的陣列,這些物件表示屬於此 Class 物件所表示的類別的成員的所有公共類別和介面。
 ClassLoader getClassLoader()
          返回該類別的類別載入器。
 Class<?> getComponentType()
          返回表示陣列元件型別的 Class
 Constructor<T> getConstructor(Class<?>... parameterTypes)
          返回一個 Constructor 物件,它反映此 Class 物件所表示的類別的指定公共建構子。
 Constructor<?>[] getConstructors()
          返回一個套件含某些 Constructor 物件的陣列,這些物件反映此 Class 物件所表示的類別的所有公共建構子。
 Annotation[] getDeclaredAnnotations()
          返回直接存在於此元素上的所有註釋。
 Class<?>[] getDeclaredClasses()
          返回 Class 物件的一個陣列,這些物件反映宣告為此 Class 物件所表示的類別的成員的全部類別和介面。
 Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
          返回一個 Constructor 物件,該物件反映此 Class 物件所表示的類別或介面的指定建構子。
 Constructor<?>[] getDeclaredConstructors()
          返回 Constructor 物件的一個陣列,這些物件反映此 Class 物件表示的類別宣告的所有建構子。
 Field getDeclaredField(String name)
          返回一個 Field 物件,該物件反映此 Class 物件所表示的類別或介面的指定已宣告欄位。
 Field[] getDeclaredFields()
          返回 Field 物件的一個陣列,這些物件反映此 Class 物件所表示的類別或介面所宣告的所有欄位。
 Method getDeclaredMethod(String name, Class<?>... parameterTypes)
          返回一個 Method 物件,該物件反映此 Class 物件所表示的類別或介面的指定已宣告方法。
 Method[] getDeclaredMethods()
          返回 Method 物件的一個陣列,這些物件反映此 Class 物件表示的類別或介面宣告的所有方法,包括公共、保護、預設(包)存取和私有方法,但不包括繼承的方法。
 Class<?> getDeclaringClass()
          如果此 Class 物件所表示的類別或介面是另一個類別的成員,則返回的 Class 物件表示該物件的宣告類別。
 Class<?> getEnclosingClass()
          返回底層類別的立即封閉類別。
 Constructor<?> getEnclosingConstructor()
          如果該 Class 物件表示建構子中的一個本地或匿名類別,則返回 Constructor 物件,它表示底層類別的立即封閉建構子。
 Method getEnclosingMethod()
          如果此 Class 物件表示某一方法中的一個本地或匿名類別,則返回 Method 物件,它表示底層類別的立即封閉方法。
 T[] getEnumConstants()
          如果此 Class 物件不表示列舉型別,則返回列舉類別的元素或 null。
 Field getField(String name)
          返回一個 Field 物件,它反映此 Class 物件所表示的類別或介面的指定公共成員欄位。
 Field[] getFields()
          返回一個套件含某些 Field 物件的陣列,這些物件反映此 Class 物件所表示的類別或介面的所有可存取公共欄位。
 Type[] getGenericInterfaces()
          返回表示某些介面的 Type,這些介面由此物件所表示的類別或介面直接實作。
 Type getGenericSuperclass()
          返回表示此 Class 所表示的實體(類別、介面、基本型別或 void)的直接父級類別的 Type
 Class<?>[] getInterfaces()
          確定此物件所表示的類別或介面實作的介面。
 Method getMethod(String name, Class<?>... parameterTypes)
          返回一個 Method 物件,它反映此 Class 物件所表示的類別或介面的指定公共成員方法。
 Method[] getMethods()
          返回一個套件含某些 Method 物件的陣列,這些物件反映此 Class 物件所表示的類別或介面(包括那些由該類別或介面宣告的以及從父級類別和父級介面繼承的那些的類別或介面)的公共 member 方法。
 int getModifiers()
          返回此類別或介面以整數編碼的 Java 語言修飾符。
 String getName()
          以 String 的形式返回此 Class 物件所表示的實體(類別、介面、陣列類別、基本型別或 void)名稱。
 Package getPackage()
          獲取此類別的套件。
 ProtectionDomain getProtectionDomain()
          返回該類別的 ProtectionDomain
 URL getResource(String name)
          尋找帶有給定名稱的資源。
 InputStream getResourceAsStream(String name)
          尋找具有給定名稱的資源。
 Object[] getSigners()
          獲取此類別的標記。
 String getSimpleName()
          返回源程式碼中給出的底層類別的簡稱。
 Class<? super T> getSuperclass()
          返回表示此 Class 所表示的實體(類別、介面、基本型別或 void)的父級類別的 Class
 TypeVariable<Class<T>>[] getTypeParameters()
          按宣告順序返回 TypeVariable 物件的一個陣列,這些物件表示用此 GenericDeclaration 物件所表示的常規宣告來宣告的型別變數。
 boolean isAnnotation()
          如果此 Class 物件表示一個註釋型別則返回 true。
 boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
          如果指定型別的註釋存在於此元素上,則返回 true,否則返回 false。
 boolean isAnonymousClass()
          當且僅當底層類別是匿名類別時返回 true
 boolean isArray()
          判定此 Class 物件是否表示一個陣列類別。
 boolean isAssignableFrom(Class<?> cls)
          判定此 Class 物件所表示的類別或介面與指定的 Class 參數所表示的類別或介面是否相同,或是否是其父級類別或父級介面。
 boolean isEnum()
          當且僅當該類別宣告為源程式碼中的列舉時返回 true。
 boolean isInstance(Object obj)
          判定指定的 Object 是否與此 Class 所表示的物件賦值相容。
 boolean isInterface()
          判定指定的 Class 物件是否表示一個介面型別。
 boolean isLocalClass()
          當且僅當底層類別是本地類別時返回 true
 boolean isMemberClass()
          當且僅當底層類別是成員類別時返回 true
 boolean isPrimitive()
          判定指定的 Class 物件是否表示一個基本型別。
 boolean isSynthetic()
          如果此類別是復合類別,則返回 true,否則 false
 T newInstance()
          創建此 Class 物件所表示的類別的一個新實例。
 String toString()
          將物件轉換為字元串。
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

方法詳細資訊

toString

public String toString()
將物件轉換為字元串。字元串的表示形式為字元串 "class" 或 "interface" 後面緊跟一個空格,然後是該類別的完全限定名,它具有 getName 返回的那種格式。如果此 Class 物件表示一個基本型別,則此方法返回該基本型別的名稱。如果該 Class 物件表示 void,則此方法返回 "void"。

覆寫:
類別 Object 中的 toString
返回:
表示此 class 物件的字元串。

forName

public static Class<?> forName(String className)
                        throws ClassNotFoundException
返回與帶有給定字元串名的類別或介面相關聯的 Class 物件。調用此方法等效於:
  Class.forName(className, true, currentLoader)
 
其中 currentLoader 表示當前類別的定義類別載入器。

例如,以下程式碼片段返回命名為 java.lang.Thread 的類別的運行時 Class 描述符。

   Class t = Class.forName("java.lang.Thread")
 

調用 forName("X") 將導致命名為 X 的類別被初始化。

參數:
className - 所需類別的完全限定名。
返回:
具有指定名的類別的 Class 物件。
拋出:
LinkageError - 如果連接失敗
ExceptionInInitializerError - 如果此方法所觸發的初始化失敗
ClassNotFoundException - 如果無法定位該類別

forName

public static Class<?> forName(String name,
                               boolean initialize,
                               ClassLoader loader)
                        throws ClassNotFoundException
使用給定的類別載入器,返回與帶有給定字元串名的類別或介面相關聯的 Class 物件。(以 getName 所返回的格式)給定一個類別或介面的完全限定名,此方法會試圖定位、載入和連接該類別或介面。指定的類別載入器用於載入該類別或介面。如果參數 loader 為 null,則該類別通過引導類別載入器載入。只有 initialize 參數為 true 且以前未被初始化時,才初始化該類別。

如果 name 表示一個基本型別或 void,則會嘗試在未命名的套件中定位使用者定義的名為 name 的類別。因此,該方法不能用於獲得表示基本型別或 void 的任何 Class 物件。

如果 name 表示一個陣列類別,則會載入但不初始化該陣列類別的元件型別。

例如,在一個實例方法中,表達式:

  Class.forName("Foo")
 
等效於:
  Class.forName("Foo", true, this.getClass().getClassLoader())
 
注意,此方法會拋出與載入、連接或初始化相關的錯誤,Java Language Specification 的第 12.2、12.3 和 12.4 節對此進行了詳細說明。 注意,此方法不檢查調用者是否可存取其請求的類別。

如果 loadernull,也存在安全管理器,並且調用者的類別載入器不為 null,則此方法通過 RuntimePermission("getClassLoader") 權限調用安全管理器的 checkPermission 方法,以確保可以存取引導類別載入器。

參數:
name - 所需類別的完全限定名
initialize - 是否必須初始化類別
loader - 用於載入類別的類別載入器
返回:
表示所需類別的類別物件
拋出:
LinkageError - 如果連接失敗
ExceptionInInitializerError - 如果該方法觸發的初始化失敗
ClassNotFoundException - 如果指定的類別載入器無法定位該類別
從以下版本開始:
1.2
另請參見:
forName(String), ClassLoader

newInstance

public T newInstance()
              throws InstantiationException,
                     IllegalAccessException
創建此 Class 物件所表示的類別的一個新實例。如同用一個帶有一個空參數列表的 new 表達式實例化該類別。如果該類別尚未初始化,則初始化這個類別。

注意,此方法傳播 null 建構子所拋出的任何異常,包括已檢查的異常。使用此方法可以有效地繞過編譯時的異常檢查,而在其他情況下編譯器都會執行該檢查。 Constructor.newInstance 方法將該建構子所拋出的任何異常包裹在一個(已檢查的)InvocationTargetException 中,從而避免了這一問題。

返回:
此物件所表示的類別的一個新分派的實例。
拋出:
IllegalAccessException - 如果該類別或其 null 建構子是不可存取的。
InstantiationException - 如果此 Class 表示一個抽象類別、介面、陣列類別、基本型別或 void; 或者該類別沒有 null 建構子; 或者由於其他某種原因導致實例化失敗。
ExceptionInInitializerError - 如果該方法引發的初始化失敗。
SecurityException - 如果存在安全管理器 s,並滿足下列任一條件:

isInstance

public boolean isInstance(Object obj)
判定指定的 Object 是否與此 Class 所表示的物件賦值相容。此方法是 Java 語言 instanceof 運算符的動態等效方法。如果指定的 Object 參數非空(null),且能夠在不引發 ClassCastException 的情況下被強制轉換成該 Class 物件所表示的參考型別,則該方法返回 true;否則返回 false

特別地,當該 Class 物件表示一個已宣告的類別時,若指定的 Object 參數是所表示類別(或其任一子類別)的一個實例,則此方法返回 true;否則返回 false。如果此 Class 物件表示一個陣列類別,且通過身份轉換或擴展參考轉換,指定的 Object 參數能轉換為一個陣列類別的物件,則返回 true;否則返回 false。如果此 Class 物件表示一個介面,且指定 Object 參數的類別或任一父級類別實作了此介面,則此方法返回 true;否則返回 false。如果此 Class 物件表示一個基本型別,則此方法返回 false

參數:
obj - 要檢查的物件
返回:
如果 obj 是此類別的實例,則返回 true
從以下版本開始:
JDK1.1

isAssignableFrom

public boolean isAssignableFrom(Class<?> cls)
判定此 Class 物件所表示的類別或介面與指定的 Class 參數所表示的類別或介面是否相同,或是否是其父級類別或父級介面。如果是則返回 true;否則返回 false。如果該 Class 表示一個基本型別,且指定的 Class 參數正是該 Class 物件,則該方法返回 true;否則返回 false

特別地,通過身份轉換或擴展參考轉換,此方法能測試指定 Class 參數所表示的型別能否轉換為此 Class 物件所表示的型別。有關詳細資訊,請參閱 Java Language Specification 的第 5.1.1 和 5.1.4 節。

參數:
cls - 要檢查的 Class 物件
返回:
表明 cls 型別的物件能否賦予此類別物件的 boolean
拋出:
NullPointerException - 如果指定的 Class 參數為 null。
從以下版本開始:
JDK1.1

isInterface

public boolean isInterface()
判定指定的 Class 物件是否表示一個介面型別。

返回:
如果此物件表示一個介面,則返回 true;否則返回 false

isArray

public boolean isArray()
判定此 Class 物件是否表示一個陣列類別。

返回:
如果此物件表示一個陣列類別,則返回 true;否則返回 false
從以下版本開始:
JDK1.1

isPrimitive

public boolean isPrimitive()
判定指定的 Class 物件是否表示一個基本型別。

有九種預定義的 Class 物件,表示八個基本型別和 void。這些類別物件由 Java 虛擬機器創建,與其表示的基本型別同名,即 booleanbytecharshortintlongfloatdouble

這些物件僅能通過下列宣告為 public static final 的變數存取,也是使此方法返回 true 的僅有的幾個 Class 物件。

返回:
當且僅當該類別表示一個基本型別時,才返回 true
從以下版本開始:
JDK1.1
另請參見:
Boolean.TYPE, Character.TYPE, Byte.TYPE, Short.TYPE, Integer.TYPE, Long.TYPE, Float.TYPE, Double.TYPE, Void.TYPE

isAnnotation

public boolean isAnnotation()
如果此 Class 物件表示一個註釋型別則返回 true。注意,如果此方法返回 true,則 isInterface() 也返回 true,因為所有的註釋型別同時也是介面。

返回:
如果此類別物件表示一個註釋型別,則返回 true;否則返回 false
從以下版本開始:
1.5

isSynthetic

public boolean isSynthetic()
如果此類別是復合類別,則返回 true,否則 false

返回:
當且僅當該類別為復合類別時才返回 true,Java 語言規範對此作了詳細說明。
從以下版本開始:
1.5

getName

public String getName()
String 的形式返回此 Class 物件所表示的實體(類別、介面、陣列類別、基本型別或 void)名稱。

如果此類別物件表示的是非陣列型別的參考型別,則返回該類別的二進制名稱,Java Language Specification, Second Edition 對此作了詳細說明。

如果此類別物件表示一個基本型別或 void,則返回的名字是一個與該基本型別或 void 所對應的 Java 語言關鍵字相同的 String

如果此類別物件表示一個陣列類別,則名字的內部形式為:表示該陣列巢狀深度的一個或多個 '[' 字元加元素型別名。元素型別名的編碼如下:

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"
 

返回:
此物件所表示的類別或介面名。

getClassLoader

public ClassLoader getClassLoader()
返回該類別的類別載入器。有些實作可能使用 null 來表示引導類別載入器。如果該類別由引導類別載入器載入,則此方法在這類別實作中將返回 null。

如果存在安全管理器,並且調用者的類別載入器不是 null,也不同於或是請求其類別載入器的類別的類別載入器的祖先,則此方法通過 RuntimePermission("getClassLoader") 權限調用此安全管理器的 checkPermission 方法,以確保可以存取該類別的類別載入器。

如果此物件表示一個基本型別或 void,則返回 null。

返回:
載入此物件所表示的類別或介面的類別載入器。
拋出:
SecurityException - 如果存在安全管理器,並且 checkPermission 方法拒絕對該類別類別載入器的存取。
另請參見:
ClassLoader, SecurityManager.checkPermission(java.security.Permission), RuntimePermission

getTypeParameters

public TypeVariable<Class<T>>[] getTypeParameters()
按宣告順序返回 TypeVariable 物件的一個陣列,這些物件表示用此 GenericDeclaration 物件所表示的常規宣告來宣告的型別變數。如果底層常規宣告不宣告型別變數,則返回長度為 0 的陣列。

指定者:
介面 GenericDeclaration 中的 getTypeParameters
返回:
表示該常規宣告所宣告的型別變數的 TypeVariable 物件的一個陣列
拋出:
GenericSignatureFormatError - 如果常規宣告的常規簽章不符合 Java Virtual Machine Specification, 3rd edition 規定的格式
從以下版本開始:
1.5

getSuperclass

public Class<? super T> getSuperclass()
返回表示此 Class 所表示的實體(類別、介面、基本型別或 void)的父級類別的 Class。如果此 Class 表示 Object 類別、一個介面、一個基本型別或 void,則返回 null。如果此物件表示一個陣列類別,則返回表示該 Object 類別的 Class 物件。

返回:
此物件所表示的類別的父級類別。

getGenericSuperclass

public Type getGenericSuperclass()
返回表示此 Class 所表示的實體(類別、介面、基本型別或 void)的直接父級類別的 Type

如果父級類別是參數化型別,則返回的 Type 物件必須準確反映源程式碼中所使用的實際型別參數。如果以前未曾創建表示父級類別的參數化型別,則創建這個型別。有關參數化型別創建過程的語義,請參閱 ParameterizedType 宣告。如果此 Class 表示 Object 類別、介面、基本型別或 void,則返回 null。如果此物件表示一個陣列類別,則返回表示 Object 類別的 Class 物件。

返回:
此物件所表示的類別的父級類別
拋出:
GenericSignatureFormatError - 如果常規類別簽章不符合 Java Virtual Machine Specification, 3rd edition 規定的格式
TypeNotPresentException - 如果常規父級類別參考不存在的型別宣告
MalformedParameterizedTypeException - 如果常規父級類別參考的參數化型別由於某種原因無法實例化
從以下版本開始:
1.5

getPackage

public Package getPackage()
獲取此類別的套件。此類別的類別載入器用於尋找該套件。如果該類別是通過引導類別載入器載入的,則搜尋從 CLASSPATH 載入的套件的集合,以尋找該類別的套件。如果所有套件對象都不是用該類別的類別載入器載入的,則返回 null。

只有該類別的附屬清單中定義了資訊,並且類別載入器使用該清單中的屬性創建了包實例時,包才具有版本和規範屬性。

返回:
該類別的套件,如果存檔或基本程式碼中沒有可用的套件資訊,則返回 null。

getInterfaces

public Class<?>[] getInterfaces()
確定此物件所表示的類別或介面實作的介面。

如果此物件表示一個類別,則返回值是一個陣列,它包含了表示該類別所實作的所有介面的物件。陣列中介面物件順序與此物件所表示的類別的宣告的 implements 子句中介面名順序一致。例如,給定宣告:

 class Shimmer implements FloorWax, DessertTopping { ... }
s 的值為 Shimmer 的一個實例;表達式:
 s.getClass().getInterfaces()[0]
 
的值為表示 FloorWax 介面的 Class 物件;
 s.getClass().getInterfaces()[1]
 
的值為表示 DessertTopping 介面的 Class 物件。

如果此物件表示一個介面,則該陣列包含表示該介面擴展的所有介面的物件。陣列中介面物件順序與此物件所表示的介面的宣告的 extends 子句中介面名順序一致。

如果此物件表示一個不實作任何介面的類別或介面,則此方法返回一個長度為 0 的陣列。

如果此物件表示一個基本型別或 void,則此方法返回一個長度為 0 的陣列。

返回:
該類別所實作的介面的一個陣列。

getGenericInterfaces

public Type[] getGenericInterfaces()
返回表示某些介面的 Type,這些介面由此物件所表示的類別或介面直接實作。

如果父級介面是參數化型別,則為它返回的 Type 物件必須準確反映源程式碼中所使用的實際型別參數。如果以前未曾創建表示每個父級介面的參數化型別,則創建這個型別。有關參數化型別創建過程的語義,請參閱 ParameterizedType 宣告。

如果此物件表示一個類別,則返回一個套件含這樣一些物件的陣列,這些物件表示該類別實作的所有介面。陣列中介面物件順序與此物件所表示的類別的宣告的 implements 子句中介面名順序一致。對於陣列類別,介面 CloneableSerializable 以該順序返回。

如果此物件表示一個介面,則該陣列包含表示該介面直接擴展的所有介面的物件。陣列中介面物件順序與此物件所表示的介面的宣告的 extends 子句中介面名順序一致。

如果此物件表示一個不實作任何介面的類別或介面,則此方法返回一個長度為 0 的陣列。

如果此物件表示一個基本型別或 void,則此方法返回一個長度為 0 的陣列。

返回:
此類別所實作的介面的一個陣列
拋出:
GenericSignatureFormatError - 如果常規類別簽章不符合 Java Virtual Machine Specification, 3rd edition 規定的格式
TypeNotPresentException - 如果任意常規父級介面參考不存在的型別宣告
MalformedParameterizedTypeException - 如果任意常規父級介面參考的參數化型別由於某種原因無法實例化
從以下版本開始:
1.5

getComponentType

public Class<?> getComponentType()
返回表示陣列元件型別的 Class。如果此類別不表示陣列類別,則此方法返回 null。

返回:
如果此類別是陣列,則返回表示此類別元件型別的 Class
從以下版本開始:
JDK1.1
另請參見:
Array

getModifiers

public int getModifiers()
返回此類別或介面以整數編碼的 Java 語言修飾符。修飾符由 Java 虛擬機器的 publicprotectedprivatefinalstaticabstractinterface 對應的常數組成;它們應當使用 Modifier 類別的方法來解碼。

如果底層類別是陣列類別,則其 publicprivateprotected 修飾符與其元件型別的修飾符相同。如果此 Class 表示一個基本型別或 void,則其 public 修飾符始終為 trueprotectedprivate 修飾符始終為 false。如果此物件表示一個陣列類別、一個基本型別或 void,則其 final 修飾符始終為 true,其介面修飾符始終為 false。該規範沒有給定其他修飾符的值。

Java Virtual Machine Specification 中的表 4.1 對修飾符編碼進行了詳細說明。

返回:
表示該類別修飾符的 int
從以下版本開始:
JDK1.1
另請參見:
Modifier

getSigners

public Object[] getSigners()
獲取此類別的標記。

返回:
此類別的標記,若無標記則返回 null。特別地,如果此物件表示一個基本型別或 void,則此方法返回 null。
從以下版本開始:
JDK1.1

getEnclosingMethod

public Method getEnclosingMethod()
如果此 Class 物件表示某一方法中的一個本地或匿名類別,則返回 Method 物件,它表示底層類別的立即封閉方法。否則返回 null。 特別地,如果底層類別是由一個型別宣告、實例初始值設定項或靜態初始值設定項立即封閉的本地或匿名類別,則此方法返回 null

返回:
如果該類別是本地或匿名類別,則返回底層類別的立即封閉方法;否則返回 null
從以下版本開始:
1.5

getEnclosingConstructor

public Constructor<?> getEnclosingConstructor()
如果該 Class 物件表示建構子中的一個本地或匿名類別,則返回 Constructor 物件,它表示底層類別的立即封閉建構子。否則返回 null。特別地,如果底層類別是由一個型別宣告、實例初始值設定項或靜態初始值設定項立即封閉的本地或匿名類別,則此方法返回 null

返回:
如果該類別是本地或匿名類別,則返回底層類別的立即封閉建構子;否則返回 null
從以下版本開始:
1.5

getDeclaringClass

public Class<?> getDeclaringClass()
如果此 Class 物件所表示的類別或介面是另一個類別的成員,則返回的 Class 物件表示該物件的宣告類別。如果該類別或介面不是其他類別的成員,則此方法返回 null。如果此 Class 物件表示一個陣列類別、基本型別或 void,則此方法返回 null。

返回:
該類別的宣告類別
從以下版本開始:
JDK1.1

getEnclosingClass

public Class<?> getEnclosingClass()
返回底層類別的立即封閉類別。如果底層類別是頂層類別,則此方法返回 null

返回:
底層類別的立即封閉類別
從以下版本開始:
1.5

getSimpleName

public String getSimpleName()
返回源程式碼中給出的底層類別的簡稱。如果底層類別是匿名的則返回一個空字元串。

陣列的簡稱即附帶 "[]" 的元件型別的簡稱。特別地,元件型別為匿名的陣列的簡稱是 "[]"。

返回:
底層類別的簡稱
從以下版本開始:
1.5

getCanonicalName

public String getCanonicalName()
返回 Java Language Specification 中所定義的底層類別的規範化名稱。如果底層類別沒有規範化名稱(即如果底層類別是一個元件型別沒有規範化名稱的本地類別、匿名類別或陣列),則返回 null。

返回:
底層類別的規範化名稱(如果存在的話);否則返回 null
從以下版本開始:
1.5

isAnonymousClass

public boolean isAnonymousClass()
當且僅當底層類別是匿名類別時返回 true

返回:
當且僅當此類別是匿名類別時,才返回 true
從以下版本開始:
1.5

isLocalClass

public boolean isLocalClass()
當且僅當底層類別是本地類別時返回 true

返回:
當且僅當該類別是本地類別時,才返回 true
從以下版本開始:
1.5

isMemberClass

public boolean isMemberClass()
當且僅當底層類別是成員類別時返回 true

返回:
當且僅當該類別是成員類別時,才返回 true
從以下版本開始:
1.5

getClasses

public Class<?>[] getClasses()
返回一個套件含某些 Class 物件的陣列,這些物件表示屬於此 Class 物件所表示的類別的成員的所有公共類別和介面。包括從父級類別繼承的公共類別和介面成員以及該類別宣告的公共類別和介面成員。如果此 Class 物件沒有公共成員類別或介面,則此方法返回一個長度為 0 的陣列。如果此 Class 物件表示一個基本型別、一個陣列類別或 void,則此方法也返回一個長度為 0 的陣列。

返回:
表示該類別公共成員的 Class 物件的陣列
拋出:
SecurityException - 如果存在安全管理器 s,並滿足下列任一條件:
從以下版本開始:
JDK1.1

getFields

public Field[] getFields()
                  throws SecurityException
返回一個套件含某些 Field 物件的陣列,這些物件反映此 Class 物件所表示的類別或介面的所有可存取公共欄位。返回陣列中的元素沒有排序,也沒有任何特定的順序。如果類別或介面沒有可存取的公共欄位,或者表示一個陣列類別、一個基本型別或 void,則此方法返回長度為 0 的陣列。

特別地,如果該 Class 物件表示一個類別,則此方法返回該類別及其所有父級類別的公共欄位。如果該 Class 物件表示一個介面,則此方法返回該介面及其所有父級介面的公共欄位。

該方法不反映陣列類別的隱式長度欄位。使用者程式碼應使用 Array 類別的方法來操作陣列。

請參閱 Java Language Specification 的第 8.2 和 8.3 節。

返回:
表示公共欄位的 Field 物件的陣列
拋出:
SecurityException - 如果存在安全管理器 s,並滿足下列任一條件:
從以下版本開始:
JDK1.1

getMethods

public Method[] getMethods()
                    throws SecurityException
返回一個套件含某些 Method 物件的陣列,這些物件反映此 Class 物件所表示的類別或介面(包括那些由該類別或介面宣告的以及從父級類別和父級介面繼承的那些的類別或介面)的公共 member 方法。陣列類別返回從 Object 類別繼承的所有(公共)member 方法。返回陣列中的元素沒有排序,也沒有任何特定的順序。如果此 Class 物件表示沒有公共成員方法的類別或介面,或者表示一個基本型別或 void,則此方法返回長度為 0 的陣列。

類別初始化方法 <clinit> 不包含在返回的陣列中。如果類別宣告了帶有相同參數型別的多個公共成員方法,則它們都會包含在返回的陣列中。

請參閱 Java Language Specification 的第 8.2 和 8.4 節。

返回:
表示此類別中公共方法的 Method 物件的陣列
拋出:
SecurityException - 如果存在安全管理器 s,並滿足下列任一條件:
從以下版本開始:
JDK1.1

getConstructors

public Constructor<?>[] getConstructors()
                                 throws SecurityException
返回一個套件含某些 Constructor 物件的陣列,這些物件反映此 Class 物件所表示的類別的所有公共建構子。如果該類別沒有公共建構子,或者該類別是一個陣列類別,或者該類別反映一個基本型別或 void,則返回一個長度為 0 的陣列。 注意,此方法返回 Constructor<T> 物件的陣列(即取自此類別建構子的陣列)時,此方法的返回型別是 Constructor<?>[]不是 預期的 Constructor<T>[]。此少量資訊的返回型別是必需的,因為從此方法返回之後,該陣列可能被修改以保存不同類別的 Constructor 物件,而這將違反 Constructor<T>[] 的型別保證。

返回:
表示此類別公共建構子的 Constructor 物件陣列
拋出:
SecurityException - 如果存在安全管理器 s,並滿足下列任一條件:
從以下版本開始:
JDK1.1

getField

public Field getField(String name)
               throws NoSuchFieldException,
                      SecurityException
返回一個 Field 物件,它反映此 Class 物件所表示的類別或介面的指定公共成員欄位。name 參數是一個 String,用於指定所需欄位的簡稱。

要反映的欄位由下面的演算法確定。設 C 為此物件所表示的類別:

  1. 如果 C 宣告一個帶有指定名的公共欄位,則它就是要反映的欄位。
  2. 如果在第 1 步中沒有找到任何欄位,則該演算法被遞歸地應用於 C 的每一個直接父級介面。直接父級介面按其宣告順序進行搜尋。
  3. 如果在第 1、2 兩步沒有找到任何欄位,且 C 有一個父級類別 S,則在 S 上遞歸調用該演算法。如果 C 沒有父級類別,則拋出 NoSuchFieldException

請參閱 Java Language Specification 的第 8.2 和 8.3 節。

參數:
name - 欄位名
返回:
name 指定的該類別的 Field 物件
拋出:
NoSuchFieldException - 如果沒有找到帶有指定名的欄位。
NullPointerException - 如果 namenull
SecurityException - 如果存在安全管理器 s,並滿足下列任一條件:
從以下版本開始:
JDK1.1

getMethod

public Method getMethod(String name,
                        Class<?>... parameterTypes)
                 throws NoSuchMethodException,
                        SecurityException
返回一個 Method 物件,它反映此 Class 物件所表示的類別或介面的指定公共成員方法。name 參數是一個 String,用於指定所需方法的簡稱。parameterTypes 參數是按宣告順序標識該方法形參型別的 Class 物件的一個陣列。如果 parameterTypesnull,則按空陣列處理。

如果 name 是 "<init>;" 或 "<clinit>",則將引發 NoSuchMethodException。否則,要反映的方法由下面的演算法確定(設 C 為此物件所表示的類別):

  1. 在 C 中搜尋任一比對的方法。如果找不到比對的方法,則將在 C 的父級類別上遞歸調用第 1 步演算法。
  2. 如果在第 1 步中沒有找到任何方法,則在 C 的父級介面中搜尋比對的方法。如果找到了這樣的方法,則反映該方法。
在 C 類別中尋找比對的方法:如果 C 正好宣告了一個具有指定名稱的公共方法並且恰恰有相同的形參型別,則它就是反映的方法。如果在 C 中找到了多個這樣的方法,並且其中有一個方法的返回型別比其他方法的返回型別都特殊,則反映該方法;否則將從中任選一個方法。

注意,類別中可以有多個比對方法,因為儘管 Java 語言禁止類別宣告帶有相同簽章但不同返回型別的多個方法,但 Java 虛擬機器並不禁止。這增加了虛擬機器的靈活性,可以用來實作各種語言特性。例如,可以使用橋方法 (brige method)實作協變返回;橋方法以及將被覆寫的方法將具有相同的簽章,不同的返回型別。

請參閱Java 語言規範 第 8.2 和 8.4 節。

參數:
name - 方法名
parameterTypes - 參數列表
返回:
與指定的 nameparameterTypes 比對的 Method 物件
拋出:
NoSuchMethodException - 如果找不到比對的方法,或者方法名為 "<init>" 或 "<clinit>"
NullPointerException - 如果 namenull
SecurityException - 如果存在安全管理器 s,並滿足下列任一條件:
從以下版本開始:
JDK1.1

getConstructor

public Constructor<T> getConstructor(Class<?>... parameterTypes)
                              throws NoSuchMethodException,
                                     SecurityException
返回一個 Constructor 物件,它反映此 Class 物件所表示的類別的指定公共建構子。parameterTypes 參數是 Class 物件的一個陣列,這些 Class 物件按宣告順序標識建構子的形參型別。 如果此 Class 物件表示非靜態上下文中宣告的內部類別,則形參型別作為第一個參數包括顯示封閉的實例。

要反映的建構子是此 Class 物件所表示的類別的公共建構子,其形參型別與 parameterTypes 所指定的參數型別相比對。

參數:
parameterTypes - 參數陣列
返回:
與指定的 parameterTypes 相比對的公共建構子的 Constructor 物件
拋出:
NoSuchMethodException - 如果找不到比對的方法。
SecurityException - 如果存在安全管理器 s,並滿足下列任一條件:
從以下版本開始:
JDK1.1

getDeclaredClasses

public Class<?>[] getDeclaredClasses()
                              throws SecurityException
返回 Class 物件的一個陣列,這些物件反映宣告為此 Class 物件所表示的類別的成員的全部類別和介面。包括該類別所宣告的公共、保護、預設(包)存取及私有類別和介面,但不包括繼承的類別和介面。如果該類別不將任何類別或介面宣告為成員,或者此 Class 物件表示基本型別、陣列類別或 void,則此方法返回一個長度為 0 的陣列。

返回:
Class 物件的陣列,表示該類別的所有 declared 成員
拋出:
SecurityException - 如果存在安全管理器 s,並滿足下列任一條件:
從以下版本開始:
JDK1.1

getDeclaredFields

public Field[] getDeclaredFields()
                          throws SecurityException
返回 Field 物件的一個陣列,這些物件反映此 Class 物件所表示的類別或介面所宣告的所有欄位。包括公共、保護、預設(包)存取和私有欄位,但不包括繼承的欄位。 返回陣列中的元素沒有排序,也沒有任何特定的順序。如果該類別或介面不宣告任何欄位,或者此 Class 物件表示一個基本型別、一個陣列類別或 void,則此方法返回一個長度為 0 的陣列。

請參閱 Java Language Specification 的第 8.2 和 8.3 節。

返回:
表示此類別所有已宣告欄位的 Field 物件的陣列
拋出:
SecurityException - 如果存在安全管理器 s,並滿足下列任一條件:
從以下版本開始:
JDK1.1

getDeclaredMethods

public Method[] getDeclaredMethods()
                            throws SecurityException
返回 Method 物件的一個陣列,這些物件反映此 Class 物件表示的類別或介面宣告的所有方法,包括公共、保護、預設(包)存取和私有方法,但不包括繼承的方法。 返回陣列中的元素沒有排序,也沒有任何特定的順序。如果該類別或介面不宣告任何方法,或者此 Class 物件 表示一個基本型別、一個陣列類別或 void,則此方法返回一個長度為 0 的陣列。類別初始化方法 <clinit> 不包含在返回陣列中。如果該類別宣告帶有相同參數型別的多個公共成員方法,則它們都包含在返回的陣列中。

請參閱 Java Language Specification 第 8.2 節。

返回:
表示此類別所有宣告方法的 Method 物件的陣列
拋出:
SecurityException - 如果存在安全管理器 s,並滿足下列任一條件:
從以下版本開始:
JDK1.1

getDeclaredConstructors

public Constructor<?>[] getDeclaredConstructors()
                                         throws SecurityException
返回 Constructor 物件的一個陣列,這些物件反映此 Class 物件表示的類別宣告的所有建構子。它們是公共、保護、預設(包)存取和私有建構子。返回陣列中的元素沒有排序,也沒有任何特定的順序。如果該類別存在一個預設建構子,則它包含在返回的陣列中。 如果此 Class 物件表示一個介面、一個基本型別、一個陣列類別或 void,則此方法返回一個長度為 0 的陣列。

請參閱 Java Language Specification 第 8.2 節。

返回:
表示此類別所有已宣告的建構子的 Constructor 物件的陣列
拋出:
SecurityException - 如果存在安全管理器 s,並滿足下列任一條件:
從以下版本開始:
JDK1.1

getDeclaredField

public Field getDeclaredField(String name)
                       throws NoSuchFieldException,
                              SecurityException
返回一個 Field 物件,該物件反映此 Class 物件所表示的類別或介面的指定已宣告欄位。name 參數是一個 String,它指定所需欄位的簡稱。注意,此方法不反映陣列類別的 length 欄位。

參數:
name - 欄位名
返回:
此類別中指定欄位的 Field 物件
拋出:
NoSuchFieldException - 如果找不到帶有指定名稱的欄位。
NullPointerException - 如果 namenull
SecurityException - 如果存在安全管理器 s,並滿足下列任一條件:
從以下版本開始:
JDK1.1

getDeclaredMethod

public Method getDeclaredMethod(String name,
                                Class<?>... parameterTypes)
                         throws NoSuchMethodException,
                                SecurityException
返回一個 Method 物件,該物件反映此 Class 物件所表示的類別或介面的指定已宣告方法。name 參數是一個 String,它指定所需方法的簡稱,parameterTypes 參數是 Class 物件的一個陣列,它按宣告順序標識該方法的形參型別。如果在某個類別中宣告了帶有相同參數型別的多個方法,並且其中有一個方法的返回型別比其他方法的返回型別都特殊,則返回該方法;否則將從中任選一個方法。如果名稱是 "<init>」 或 「<clinit>",則引發一個 NoSuchMethodException

參數:
name - 方法名
parameterTypes - 參數陣列
返回:
該類別與指定名和參數相比對的方法的 Method 物件
拋出:
NoSuchMethodException - 如果找不到比對的方法。
NullPointerException - 如果 namenull
SecurityException - 如果存在安全管理器 s,並滿足下列任一條件:
從以下版本開始:
JDK1.1

getDeclaredConstructor

public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
                                      throws NoSuchMethodException,
                                             SecurityException
返回一個 Constructor 物件,該物件反映此 Class 物件所表示的類別或介面的指定建構子。parameterTypes 參數是 Class 物件的一個陣列,它按宣告順序標識建構子的形參型別。 如果此 Class 物件表示非靜態上下文中宣告的內部類別,則形參型別作為第一個參數包括顯示封閉的實例。

參數:
parameterTypes - 參數陣列
返回:
帶有指定參數列表的建構子的 Constructor 物件
拋出:
NoSuchMethodException - 如果找不到比對的方法。
SecurityException - 如果存在安全管理器 s,並滿足下列任一條件:
從以下版本開始:
JDK1.1

getResourceAsStream

public InputStream getResourceAsStream(String name)
尋找具有給定名稱的資源。尋找與給定類別相關的資源的規則是通過定義類別的 class loader 實作的。此方法委託此物件的類別載入器。如果此物件通過引導類別載入器載入,則此方法將委託給 ClassLoader.getSystemResourceAsStream(java.lang.String)

在委託前,使用下面的演算法從給定的資源名建構一個絕對資源名:

參數:
name - 所需資源的名稱
返回:
一個 InputStream 物件;如果找不到帶有該名稱的資源,則返回 null
拋出:
NullPointerException - 如果 namenull
從以下版本開始:
JDK1.1

getResource

public URL getResource(String name)
尋找帶有給定名稱的資源。尋找與給定類別相關的資源的規則是通過定義類別的 class loader 實作的。此方法委託給此物件的類別載入器。如果此物件通過引導類別載入器載入,則此方法將委託給 ClassLoader.getSystemResource(java.lang.String)

在委託前,使用下面的演算法從給定的資源名建構一個絕對資源名:

參數:
name - 所需資源的名稱
返回:
一個 URL 物件;如果找不到帶有該名稱的資源,則返回 null
從以下版本開始:
JDK1.1

getProtectionDomain

public ProtectionDomain getProtectionDomain()
返回該類別的 ProtectionDomain。如果安裝了安全管理器,則此方法首先通過 RuntimePermission("getProtectionDomain") 權限調用安全管理器的 checkPermission 方法,以確保可以獲取 ProtectionDomain

返回:
該類別的 ProtectionDomain
拋出:
SecurityException - 若安全管理器存在,並且其 checkPermission 方法不允許獲取 ProtectionDomain。
從以下版本開始:
1.2
另請參見:
ProtectionDomain, SecurityManager.checkPermission(java.security.Permission), RuntimePermission

desiredAssertionStatus

public boolean desiredAssertionStatus()
如果要在調用此方法時將要初始化該類別,則返回將分派給該類別的斷言狀態。 如果已經設置了該類別的斷言狀態,則返回其最新設置;如果有包預設斷言狀態屬於此類別,則返回最特殊的相關套件預設斷言狀態的最新設置;如果該類別不是系統類別(即它有類別載入器),則返回其類別載入器的預設斷言狀態;否則返回系統類別預設斷言狀態。

很少有開發人員需要此方法;它是為 JRE 自身提供的。(它使類別能夠在初始化時確定是否啟用斷言。)注意,不保證此方法在(或將要)初始化指定類別時返回與(或將與)該指定類別相關的實際斷言狀態。

返回:
所需的指定類別斷言狀態。
從以下版本開始:
1.4
另請參見:
ClassLoader.setClassAssertionStatus(java.lang.String, boolean), ClassLoader.setPackageAssertionStatus(java.lang.String, boolean), ClassLoader.setDefaultAssertionStatus(boolean)

isEnum

public boolean isEnum()
當且僅當該類別宣告為源程式碼中的列舉時返回 true。

返回:
當且僅當該類別宣告為源程式碼中的列舉時返回 true
從以下版本開始:
1.5

getEnumConstants

public T[] getEnumConstants()
如果此 Class 物件不表示列舉型別,則返回列舉類別的元素或 null。

返回:
以宣告順序返回一個陣列,該陣列包含構成此 Class 物件所表示的列舉類別的值,或者在此 Class 物件不表示列舉型別時返回 null
從以下版本開始:
1.5

cast

public T cast(Object obj)
將一個物件強制轉換成此 Class 物件所表示的類別或介面。

參數:
obj - 要強制轉換的物件
返回:
強制轉換返回該物件,若 obj 為 null 則返回 null
拋出:
ClassCastException - 如果該物件不是 null 也不能分派給型別 T。
從以下版本開始:
1.5

asSubclass

public <U> Class<? extends U> asSubclass(Class<U> clazz)
強制轉換該 Class 物件,以表示指定的 class 物件所表示的類別的一個子類別。檢查強制轉換的有效性,如果無效則拋出 ClassCastException。如果此方法成功了,它將始終返回對此 class 物件的一個參考。

此方法的使用場合為:客戶端需要「收縮轉換」 Class 物件的型別,以便將其傳遞給某個 API,且該 API 對它願意接受的 Class 物件進行限制。強制轉換會產生一個編譯時警告,因為強制轉換的正確性無法在運行時檢查(因為常規型別是通過擦除實作的)。

返回:
Class 物件,它被強制轉換以表示指定類別物件的子類別。
拋出:
ClassCastException - 如果該 Class 物件不表示指定類別的子類別(這裡「子類別」包括該類別本身)。
從以下版本開始:
1.5

getAnnotation

public <A extends Annotation> A getAnnotation(Class<A> annotationClass)
從介面 AnnotatedElement 複製的描述
如果存在該元素的指定型別的註釋,則返回這些註釋,否則返回 null。

指定者:
介面 AnnotatedElement 中的 getAnnotation
參數:
annotationClass - 對應於註釋型別的 Class 物件
返回:
如果該元素的指定註釋型別的註釋存在於此物件上,則返回這些註釋,否則返回 null
拋出:
NullPointerException - 如果給定的註釋類別為 null
從以下版本開始:
1.5

isAnnotationPresent

public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
從介面 AnnotatedElement 複製的描述
如果指定型別的註釋存在於此元素上,則返回 true,否則返回 false。此方法主要是為了便於存取標記註釋而設計的。

指定者:
介面 AnnotatedElement 中的 isAnnotationPresent
參數:
annotationClass - 對應於註釋型別的 Class 物件
返回:
如果指定註釋型別的註釋存在於此物件上,則返回 true,否則返回 false
拋出:
NullPointerException - 如果給定的註釋類別為 null
從以下版本開始:
1.5

getAnnotations

public Annotation[] getAnnotations()
從介面 AnnotatedElement 複製的描述
返回此元素上存在的所有註釋。(如果此元素沒有註釋,則返回長度為零的陣列。)該方法的調用者可以隨意修改返回的陣列;這不會對其他調用者返回的陣列產生任何影響。

指定者:
介面 AnnotatedElement 中的 getAnnotations
返回:
此元素上存在的所有註釋
從以下版本開始:
1.5

getDeclaredAnnotations

public Annotation[] getDeclaredAnnotations()
從介面 AnnotatedElement 複製的描述
返回直接存在於此元素上的所有註釋。與此介面中的其他方法不同,該方法將忽略繼承的註釋。(如果沒有註釋直接存在於此元素上,則返回長度為零的一個陣列。)該方法的調用者可以隨意修改返回的陣列;這不會對其他調用者返回的陣列產生任何影響。

指定者:
介面 AnnotatedElement 中的 getDeclaredAnnotations
返回:
直接存在於此元素上的所有註釋
從以下版本開始:
1.5

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only