閉包與反射
文章目錄
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)
; :讓反射到的一個方法運行,需要兩個參數,一個是要調用的對象(獲取有反射),一個是實參