Java學習|閉包與反射

閉包與反射

文章目錄

1)Java中的閉包
2)Java反射機制


Java中的閉包

  • 通過"接口+內部類"實現
  • 內部類
    • 將一個類定義在另一個類的內部。
    • 內部類可以訪問到外圍類的變量、方法或者其他內部類等所有成員。
    • 外部類不能訪問內部類中的變量。
    • 通過外圍類的實例創建內部類。{外圍類的實例}.new 內部類
    • 通過{外圍類名}.this.{變量名稱}顯示引用外圍類的變量
  • 局部內部類
    • 在方法的作用域內定義的內部類
    • 在方法的外圍是不可見的
  • 匿名內部類
    • 匿名,沒有名字的內部類
    • 通過new關鍵字來創建 new 接口名稱(){}
    • 沒有名稱,不能重載
  • 閉包所綁定的本地變量必須使用final修飾符
    • 可以再方法體內定義一下新的final局部變量,然後把參數賦值給他。

Java反射機制

  • 在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法,對於任意一個對象,都能夠調用它的任意方法和屬性
  • 反射就是把java中的各種成分映射成一個個的Java對象,利用反射機制可以獲取所需的私有成員或是方法
  • 獲取Class對象的三種方式
    a. Object ——> getClass();
    b. 任何數據類型(包括基本數據類型)都有一個“靜態”的class屬性
    c. 通過Class類的靜態方法:forName(String className)(常用)
  • 1.獲取構造方法並調用
  • 1.獲取構造方法:
    • 1).批量的方法:
      public Constructor[] getConstructors():所有公有 構造方法
      public Constructor[] getDeclaredConstructors():獲取所有的構造方法

    • 2).獲取單個的方法:
      public Constructor getConstructor(Class... parameterTypes):單個的公有的構造方法:
      public Constructor getDeclaredConstructor(Class... parameterTypes):獲取某個構造方法

  • 2.調用構造方法:
    • 調用newInstance,它是 Constructor類的方法
  • 2.獲取成員變量並調用
    getFields() :獲取成員變量 Class類的方法 、class文件中的所有公共的成員變量;返回值是Field[] Field類描述成員變量對象的類
    Field getField(傳遞字符串類型的變量名) :獲取指定的成員變量 String name;Class類的方法 獲取指定的成員變量
    void set(Object obj, Object value):Field類的方法 ,修改成員變量的值;Object obj 必須有對象的支持, Object value 修改後的值
  • 3.獲取成員方法並調用
    .getDeclaredMethod("show4", int.class) :調用所有指定方法,需要傳入兩個參數,第一個是調用的方法名稱,第二個是方法的形參類型
    .invoke(obj, 20); :讓反射到的一個方法運行,需要兩個參數,一個是要調用的對象(獲取有反射),一個是實參

參考

一個例子讓你瞭解Java反射機制
一個例子讓你瞭解Java反射機制
JAVA閉包

發佈了45 篇原創文章 · 獲贊 8 · 訪問量 7757
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章