天天看點

反射java

所謂反射(refection),其實就是程式自己能夠檢查自身資訊,就像程式會通過鏡子反光來看自己本身一樣。反射使得 java語言具有了“動态性”,即程式首先會檢查某個類中的方法、屬性等資訊,然後再動态地調用或建立該類或該類的對象

一、反射的基石——class類

    class類用來描述java中的一切事物,該類描述了類名字、類的通路屬性、類所屬的包名、字段名稱的清單、方法名稱的清單。例如class類的getname()方法可以擷取所描述類的類名

    class執行個體代表記憶體中的一份位元組碼,所謂位元組碼就是當java虛拟機加載某個類的對象時,首先需要把硬碟上該類的二進制源碼編譯成class檔案的二進制代碼(位元組碼),然後把class檔案的位元組碼加載到記憶體中,之後再建立該類的對象

二、反射的基本應用

    所謂反射就是把java類中的各種成分隐射成相應的java類。通過反射,在具體編寫程式時,不僅可以動态地生成某個類中所需要的成員,而且還能動态地調用相應的成員。檢視api幫助文檔可以發現,不僅一個java類可以用class類的對象表示,而且java類的各種成員,如成員變量、方法、構造方法、包等,也可以用相應的java類表示

    反射一般會設計如下類:class(表示一個類的類),field(表示屬性的類),method(表示方法的類)和construct(表示構造方法的類)。那麼如何擷取這些類(除了class類)的對象呢?通過檢視api幫助文檔可以發現,class類存在一系列的方法,來擷取相關類中的變量、方法、構造方法、包等資訊。

---------------------

------------------越是喧嚣的世界,越需要甯靜的思考------------------

合抱之木,生于毫末;九層之台,起于壘土;千裡之行,始于足下。

積土成山,風雨興焉;積水成淵,蛟龍生焉;積善成德,而神明自得,聖心備焉。故不積跬步,無以至千裡;不積小流,無以成江海。骐骥一躍,不能十步;驽馬十駕,功在不舍。锲而舍之,朽木不折;锲而不舍,金石可镂。蚓無爪牙之利,筋骨之強,上食埃土,下飲黃泉,用心一也。蟹六跪而二螯,非蛇鳝之穴無可寄托者,用心躁也。