黑馬程序員 反射一些知識應用

1:類的加載概述
"當程序要使用某個類時,如果該類還未被加載到內存中,
則系統會通過加載,連接,初始化三步來實現對這個類進行初始化。
加載 
就是指將class文件讀入內存,併爲之創建一個Class對象。
任何類被使用時系統都會建立一個Class對象。
連接
驗證 是否有正確的內部結構,並和其他類協調一致
準備 負責爲類的靜態成員分配內存,並設置默認初始化值
解析 將類的二進制數據中的符號引用替換爲直接引用
初始化 就是我們以前講過的初始化步驟"
2:加載時機
"創建類的實例
訪問類的靜態變量,或者爲靜態變量賦值
調用類的靜態方法
使用反射方式來強制創建某個類或接口對應的java.lang.Class對象
初始化某個類的子類
直接使用java.exe命令來運行某個主類"
3:類加載器的作用
"Bootstrap ClassLoader 根類加載器
也被稱爲引導類加載器,負責Java核心類的加載
比如System,String等。在JDK中JRE的lib目錄下rt.jar文件中
Extension ClassLoader 擴展類加載器
負責JRE的擴展目錄中jar包的加載。
在JDK中JRE的lib目錄下ext目錄
Sysetm ClassLoader 系統類加載器
負責在JVM啓動時加載來自java命令的class文件,以及classpath環境變量所指定的jar包和類路徑"
4:獲取所有構造方法
"public Constructor<?>[] getConstructors()
public Constructor<?>[] getDeclaredConstructors()"
5:獲取單個構造方法
"public Constructor<T> getConstructor(Class<?>... parameterTypes)
public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)"
6:動態代理概述
"代理:本來應該自己做的事情,卻請了別人來做,被請的人就是代理對象。
舉例:春季回家買票讓人代買
動態代理:在程序運行過程中產生的這個對象
而程序運行過程中產生對象其實就是我們剛纔反射講解的內容,
所以,動態代理其實就是通過反射來生成一個代理


在Java中java.lang.reflect包下提供了一個Proxy類和一個InvocationHandler接口,
通過使用這個類和接口就可以生成動態代理對象。JDK提供的代理只能針對接口做代理。
我們有更強大的代理cglib,Proxy類中的方法創建動態代理類對象
public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)
最終會調用InvocationHandler的方法
InvocationHandler Object invoke(Object proxy,Method method,Object[] args)"
設計模式(模版設計模式概述和使用)
"a:優點
使用模版方法模式,在定義算法骨架的同時,可以很靈活的實現具體的算法,滿足用戶靈活多變的需求
b:缺點
如果算法骨架有修改的話,則需要修改抽象類"
A:裝飾模式概述
"a:優點
使用裝飾模式,可以提供比繼承更靈活的擴展對象的功能,它可以動態的添加對象的功能,
並且可以隨意的組合這些功能。
b:缺點
正因爲可以隨意組合,所以就可能出現一些不合理的邏輯。"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章