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

  • 獲取Class對(duì)象

  • 從Class對(duì)象中讀取字段信息

  • 從Class對(duì)象中讀取方法信息

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

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

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

        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;
        ........

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

網(wǎng)友評(píng)論