天天看點

學習反射classloader

1***********************************************

如果在程式運作中要加載新的類,就要新的類加載器

Classloader 回憶錄。。。。

//jvm.dll

//jvm 初始化

//bootstrap loader   class.path ! C寫的!  JRE 目錄 classes/onlyfun/caterpillar

//extclassloader  lib/ext/classes 目錄  /onliyfun/catepillar

//appclassloader  

//xxx.class

URL u = new URL("file:/d:/");

ClassLoader mycl = new URLClassLoader(new URL[]{u});

Class aaa = mycl.loadClass("User");

如果加載某個東西,預設的是從父類(Bootstraploade )一直 到子類( Appclassloader)搜尋

其實就是從系統設定的 一些path開始找,然後找使用者自定的path

相當于 class.forname();

2**************************************************

Field f1 = aaa.getDeclaredField("name");

//f1.setAccessible(true); 

  //牛啊……居然可以無視private屬性,直接給屬性指派

Object x = aaa.newInstance();

f1.setInt(x, 111);//如果沒有f1.setAccessible(true);  則會報錯,如果name是一個private修飾的話

3****************************************************

Class c3 = Integer.class;

//class類型 ,數組長度

Object c3n = Array.newInstance(c3, 5);

for(int n = 0 ; n < 5 ; n++)

{

//對象,Index,對應的值

Array.set(c3n, n, n*n);

}

for(int n = 0 ; n < 5 ; n++)

{

//對象 , index

System.out.println(Array.get(c3n, n));

}

原來反射形式的數組,用Array對象解決。它也有newInstance方法。不過是針對數組的