Java反射——java.lang.Class 類簡介

來源:互聯網
上載者:User

標籤:應用程式   名稱   protect   規範   基本類型   cdecl   ted   imp   foo   

Java的基本思想之一是萬事萬物即對象,類也是一種對象。但是類是什麼對象呢?Java中的類是java.lang.Class的執行個體化對象,這被成為類類型。

//java.lang.Class類中的的主要方法如下

 

 

下面是Java1.8 API中java.lang.Class類中的方法:

 

va.lang中Class 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對象,由具有相同元素類型和維數的所有數組共用。 原始Java類型(boolean,byte,char,short,int,long,float和double)以及關鍵字void也表示為Class對象。

類沒有公用建構函式。 相反,類對象由Java虛擬機器在載入類時自動構造,並通過調用類載入器中的defineClass方法。

以下樣本使用Class對象來列印對象的類名:
  void printClassName(Object obj) {
    System.out.println("The class of " + obj +
    " is " + obj.getClass().getName());
  }

也可以使用類文字擷取命名類型(或void)的Class對象。 請參閱Java?語言規範的第15.8.2節。 例如:
  System.out.println("The name of class Foo is: "+Foo.class.getName());


方法摘要:
修飾符和類型 方法和描述
<U> Class<? extends U>asSubclass(Class<U> clazz)
  轉換此Class對象以表示由指定的類對象表示的類的子類。

T cast(Object obj)
  將對象強制轉換為此Class對象所表示的類或介面。

booleandesiredAssertionStatus()
  如果要在調用此方法時初始化,則返回將分配給此類的斷言狀態。

static Class<?>forName(String className)
  返回與具有給定字串名稱的類或介面關聯的Class對象。

static Class <?> forName(String name,boolean initialize,ClassLoader loader)
  使用給定的類載入器返回與具有給定字串名稱的類或介面關聯的Class對象。

AnnotatedType[] getAnnotatedInterfaces()
  返回AnnotatedType對象的數組,這些對象表示使用類型來指定此Class對象所表示的實體的超介面。

AnnotatedType getAnnotatedSuperclass()
  返回AnnotatedType對象,該對象表示使用類型來指定此Class對象所表示的實體的超類。

<A extends Annotation> A getAnnotation(Class<A> annotationClass)
  如果存在這樣的注釋,則返回指定類型的此元素的注釋,否則返回null。

Annotation[] getAnnotations()
  返回此元素上存在的注釋。

<A extends Annotation> A[] getAnnotationsByType(Class<A> annotationClass)
  返回與此元素關聯的注釋。

String getCanonicalName()
  返回Java語言規範定義的基礎類的正式名稱。

Class<?>[] getClasses()
  返回一個數組,其中包含Class對象,這些對象表示作為此Class對象所表示的類的成員的所有公用類和介面。

ClassLoader getClassLoader()
  返回類的類載入器。

Class<?> getComponentType()
  返回表示數組的組件類型的Class。

Constructor<T> getConstructor(Class<?>... parameterTypes)
  返回一個Constructor對象,該對象反映此Class對象所表示的類的指定公用建構函式。

Constructor<?>[] getConstructors()
  返回一個包含Constructor對象的數組,這些對象反映此Class對象所表示的類的所有公用建構函式。

<A extends Annotation> A getDeclaredAnnotation(Class<A> annotationClass)
  如果直接存在這樣的注釋,則返回指定類型的此元素的注釋,否則返回null。

Annotation[] getDeclaredAnnotations()
  返回直接出現在此元素上的注釋。

<A extends Annotation> A[] getDeclaredAnnotationsByType(Class<A> annotationClass)
  如果此類注釋直接存在或間接存在,則返回指定類型的此元素的注釋。

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()
  返回一個數組,其中包含反映此Class對象所表示的類或介面的所有聲明方法的Method對象,包括public,protected,default(包)訪問和私人方法,但不包括繼承的方法。

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()
  返回表示由此對象表示的類或介面直接實現的介面的Types。

Type getGenericSuperclass()
  返回表示此Class表示的實體(類,介面,基本類型或void)的直接超類的Type。

Class<?>[] getInterfaces()
  確定由此對象表示的類或介面實現的介面。

Method getMethod(String name, Class<?>... parameterTypes)
  返回一個Method對象,該對象反映此Class對象所表示的類或介面的指定公用成員方法。

Method[] getMethods()
  返回一個包含Method對象的數組,這些對象反映此Class對象所表示的類或介面的所有公用方法,包括由類或介面聲明的那些以及從超類和超介面繼承的那些。

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。

String getTypeName()
  返回此類型名稱的資訊字串。

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 toGenericString()
  返回描述此Class的字串,包括有關修飾符和型別參數的資訊。

String toString()
  將對象轉換為字串。

Java反射——java.lang.Class 類簡介

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.