1. 程式人生 > 其它 >入坑.net core(二)新建一個.net core api

入坑.net core(二)新建一個.net core api

反射

之前就練過反射,但是也只停留在練過,跟著程式碼無腦敲,敲完了就當自己學過了,反射是什麼?有什麼作用?怎麼使用?一問三不知,以至於之後看到了反射還覺得很陌生,今天把反射重新學了一遍,加深了理解,有了自己的思路,雖然不能說很熟練,但也算是開了一個好頭吧。---為了加強記憶,遂記之。

---前言

反射這一概念最早由程式設計開發人員Smith在1982年提出,主要指應用程式訪問、檢測、修改自身狀態與行為的能力。這一概念的提出立刻吸引了程式設計界的極大關注,各種研究工作隨之展開,隨之而來引發程式設計革命,出現了多種支援反射機制的面嚮物件語言。

在電腦科學領域,反射是指一類能夠自我描述和自控制的應用。在Java程式語言中,反射是一種強有力的工具,是面向抽象程式設計一種實現方式,它能使程式碼語句更加靈活,極大提高程式碼的執行時裝配能力。

定義

Java的反射(reflection)機制是指在程式的執行狀態中,可以構造任意一個類的物件,可以瞭解任意一個物件所屬的類,可以理了解任意一個類的成員變數和方法,可以呼叫任意一個物件的屬性和方法。這種動態獲取程式資訊以及動態呼叫物件的功能稱為Java語言的反射機制


程式碼中實現

  • 獲得Class物件的三種方式

    1. 使用Class類的靜態方法forName(String className)

    Class cObj = Class.forName("java.lang.String");
    1. 用類名呼叫該類的class屬性來獲得該類對應的Class物件,即”類名.class“

    ClassObj = Test.class;
    1. 用物件呼叫getClass()方法來獲得該類對應的Class物件

    Person person = new Person();
    Classs cObj = person.getClass();
  • 獲得Class物件之後,就可以通過class物件呼叫Class類的以下方法

 

說明:在通過getFields()和getMethods()方法依次獲得許可權為public的成員變數和方法時,還包含從超類中繼承到的成員變數和方法;而通過getDeclaredFields()和getDeclaredMethods()方法只是獲得在本類中定義的所有成員方法和變數

通過使用上述方法得到一個型別或者方法陣列之後,用他們本類中的方法可以對獲得的物件進行操作,另外還有一些常用的方法,例如:

方法 說明
isVarArgs() 檢視該構造方法是否允許帶有可變數量的引數,如果允許則返回true,否則返回false
newInstance 通過該構造方法利用指定引數建立一個該類的物件,如果未設定引數則表示採用預設無引數的構造方法
setAccessible(boolean flag) 如果該構造方法的許可權為private,預設不允許通過反射利用newInstance()方法建立物件。如果先執行該方法,並將入口引數設為true,則允許建立

參考資料:

  1. 百度百科(JAVA反射機制)

  2. 《Java從入門到精通》

  3. B站狂神視訊