類加載器:加載過程
加載检访,連接冕屯,初始化
分類:
Bootstrap ClassLoader 根類加載器:核心類的加載System,String這樣的砂竖。在rt.jar文件中
Extension ? ? ? 擴(kuò)展加載器:加載擴(kuò)展目錄中的jar目錄
Sysetm ? ? ? 系統(tǒng)類加載器:自己寫的文件
反射:通過class文件包警,去使用該文件中的成員變量拧咳,構(gòu)造方法图甜,成員方法
方式1:public Class getClass();
方式2:public static Class class;
方式3:Class類:public Class forName("全路徑");
get后用Deckared修飾的是可以讀private修飾的方法或者變量碍粥。末尾加有s的是獲取所有沒有則為單個
獲取步驟:
1.通過反射獲取class文件 三種方法;
2.通過指定方法來獲取相應(yīng)的方法或者變量黑毅;
3.通過2的指定方法類中的實現(xiàn)方法來使用獲取到的方法或者變量嚼摩;
實現(xiàn)方法:
public Object newInstance();當(dāng)調(diào)用方法中有參數(shù)并被修飾后,直接實際參數(shù)使用
注意當(dāng)實現(xiàn)的是一個私有方法或者變量的時候前面需要如下方法來暴力訪問:
Constructor:
public static void SetAccessible(boolean);
獲取構(gòu)造方法:
public Constructor <> getConstructor(Class<>... parameterTypes);括號內(nèi)的是參數(shù)矿瘦,修飾用String.class(通用)枕面;
獲取成員變量:
public Field <> getField();
在獲取步驟上面添加:
4.使用Field的set方法:Field.set(obj,賦值);將值賦予給obj
獲取成員方法:
public methods getMethod(方法名,參數(shù));
4.public 方法返回值 invoke(obj,實際參數(shù));
中介添加動態(tài)創(chuàng)建對象:廣泛應(yīng)用于動態(tài)添加在調(diào)用方法時候添加其他檢測記錄等條件
proxy類:
public static 被添加的對象 newProxyInstance(ClassLoader loader,Class[]interfaces,InvocationHandler h);
調(diào)用前重寫InvocationHandler h接口
public Object invoke(Object proxy,Method method,object[] args){
添加的方法
源方法 Object result =method,invoke(被添加的對象,args)缚去;
return result;
}