反射是程序在運(yùn)行狀態(tài)下,動(dòng)態(tài)的獲取某個(gè)類的內(nèi)部信息的一種操作。例如:類名,包名,所有屬性的集合,所有方法的集合,構(gòu)造方法的集合等。該操作發(fā)生在程序的運(yùn)行時(shí)狀態(tài),所以編譯器管不著有關(guān)反射的一些代碼,通常只有在運(yùn)行時(shí)才能暴露出程序的內(nèi)部錯(cuò)誤。反射的核心在于‘Class’這個(gè)類,本篇將從Class這個(gè)類開始介紹有關(guān)反射的一些基本的概念,主要內(nèi)容如下:

  • 獲取Class對象

  • 從Class對象中讀取字段信息

  • 從Class對象中讀取方法信息

  • 獲取Class對象中的所有構(gòu)造方法并使用它們動(dòng)態(tài)創(chuàng)建類對象

  • 反射的一些其他細(xì)節(jié)

一、獲取Class對象
     此處的Class是一個(gè)具體的類(java.lang.Class),并不是我們自定義一個(gè)類時(shí)所使用的關(guān)鍵字class。這是一個(gè)泛型類,通常有兩種方法可以獲取該對象。第一種方式,使用類名.class來獲取Class對象。

        Class<Integer> integerClass = int.class;        Class<Double> doubleClass = double.class;        Class<Character> characterClass = char.class;
        .......        
        Class<Map> mapClass = Map.class;        
        Class<String> stringClass = String.class;        Class<Date> dateClass = Date.class;
        ........

無論是基本數(shù)據(jù)類型,還是一般的class類型,或是接口類型,都是可以通過.class的方式來獲取與之對應(yīng)的Class對象。第二中獲取Class對象的方法是,通過getClass方法,