Java 反射簡析

  一直以來,多少Java編程人員對於Java的反射諱莫如深,其實簡單粗暴的說,所謂反射就是文件與Java對象之間的轉換而已。 編程

咱們編寫的Java後綴的文件,通過編譯以後就成爲class後綴的文件了,jvm對其進行登記。 jvm

反射的時候,jvm按照花名冊,加載全部相關的class文件。這時候,文件裏面就是代碼,就是對象。 spa

加載以後呢,按照Java規則,將其還原爲咱們熟悉的Java文件,這時候這個class文件就從編譯狀態變成了編程狀態。 對象

實際反射的根本就是文件io。在這個基礎之上,必須理解的是,Java的一切皆是面向對象,連基本數據類型都有對象包裝類。 get


 1.得到一個類的類模版 io

 Class c = 對象名.getClass(); 編譯

 Class c = Class.forName(包名+類名);  ---經常使用 class

咱們也能夠根據模版來獲取其對應的類對象: c.newInstance(); 基礎

上面就是從jvm加載的花名冊裏面獲取到class文件,而後調用面向對象的方法,生成對象,class就是編譯後的class文件對應的對象類型。 權限

重點:Class是一個對象。

  2.根據類模版獲取類的信息:

 獲取類的屬性: 

Filed----c.getFiled(String pname)  得到指定屬性(公共字段)

Filed----c.getDeclearedFiled(String pname)  得到指定屬性(全部權限字段)

Filed[]----c.getFileds()  得到全部屬性(公共字段)

Filed[]----c.getDeclearedFileds()  得到全部屬性(全部權限字段)

上面是基於對象獲取屬性與字段。

重點:屬性自己也是一個對象。

獲取類的方法:

Method----c.getMethod(String methodName,class[] params)  得到指定方法(公共方法)

Method----c.getDeclearedMethod(String methodName,class[] params)  得到指定方法(全部方法)

Method[]----c.getMethods()  得到全部方法(公共方法)

Method[]----c.getDeclearedMethods()  得到全部方法(全部權限方法) 

獲取類的方法,同樣是基於對象操做;

重點:方法自己也是對象。

因此,必須深入的理解Java的面向對象的完全與乾脆。

因此反射的本質,就是從Java格式的對象文件到編譯的class文件,而後從編譯的class文件到可編程的Java文件,咱們看得懂的對象文件。編譯的過程就是文件重寫,從一直規則到另外一種規則。反射的時候,就是經過IO進行反向規則還原寫。還原的過程,一切都是從文件到對象的過程。理解類是對象,屬性是對象,方法是對象。

相關文章
相關標籤/搜索