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方法。不过是针对数组的