反射是程序在運(yùn)行狀態(tài)下,動態(tài)的獲取某個類的內(nèi)部信息的一種操作。例如:類名,包名,所有屬性的集合,所有方法的集合,構(gòu)造方法的集合等。該操作發(fā)生在程序的運(yùn)行時狀態(tài),所以編譯器管不著有關(guān)反射的一些代碼,通常只有在運(yùn)行時才能暴露出程序的內(nèi)部錯誤。反射的核心在于‘Class’這個類,本篇將從Class這個類開始介紹有關(guān)反射的一些基本的概念,主要內(nèi)容如下:
獲取Class對象
從Class對象中讀取字段信息
從Class對象中讀取方法信息
獲取Class對象中的所有構(gòu)造方法并使用它們動態(tài)創(chuàng)建類對象
反射的一些其他細(xì)節(jié)
一、獲取Class對象
此處的Class是一個具體的類(java.lang.Class),并不是我們自定義一個類時所使用的關(guān)鍵字class。這是一個泛型類,通常有兩種方法可以獲取該對象。第一種方式,使用類名.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方法,