對於反射機制,估計很多程序員不是太關注,當然除了一些搭架構的除外。如果你想更深入的瞭解框架,反射是必不可少的知識點。
一:什麼是反射
程序中一般的對象類型都是在編譯期就確定下來的,而Java 反射機制可以動態的創建對象並調用其屬性,這樣對象的類型在編譯期是未知的。所以我們可以通過反射機制直接創建對象即使這個對象在編譯期是未知的,
反射的核心:是 JVM 在運行時 才動態加載的類或調用方法或屬性,他不需要事先(寫代碼的時候或編譯期)知道運行對象是誰。
二、Java反射框架主要提供以下功能:
1.在運行時判斷任意一個對象所屬的類;
2.在運行時構造任意一個類的對象;
3.在運行時判斷任意一個類所具有的成員變量和方法(通過反射甚至可以調用private方法);
4.在運行時調用任意一個對象的方法
三、主要用途 :
1、反射最重要的用途就是開發各種通用框架。
四、基本反射功能的實現(反射相關的類一般都在java.lang.relfect包裏):
1、獲得Class對象
使用Class類的forName靜態方法,直接獲取某一個對象的class, 調用某個對象的getClass()方法
2、判斷是否爲某個類的實例
用instanceof關鍵字來判斷是否爲某個類的實例
3、創建實例
使用Class對象的newInstance()方法來創建Class對象對應類的實例。
先通過Class對象獲取指定的Constructor對象,再調用Constructor對象的newInstance()方法來創建實例。
4、獲取方法
getDeclaredMethods()
5、獲取構造器信息
getDeclaredMethods()
getMethods()
getMethod()
6、獲取類的成員變量(字段)信息
getFiled: 訪問公有的成員變量
getDeclaredField:所有已聲明的成員變量。但不能得到其父類的成員變量
getFileds和getDeclaredFields用法
7、調用方法
invoke()
8、利用反射創建數組