1、类的加载 类的加载分为隐式加载和显示加载,通常我们隐式加载用的比较多,如:Test obj=new Test();这样jvm就通过classpath找到Test.class路径,加载到内存,不过jvm在加载前会检查该类是否存在内存中,如果存在就不加载了;其次就是显示加载了,如: Class c = Class.forName("Test"); Test obj= (Test)c.newInstance(); 通过forName显示的把类加载到内存,并通过newInstance()得到实例,这样我们就可以用obj对象了。
Class 的 forName() 方法还有另外一种形式: Class forName(String s, boolean flag, ClassLoader classloader) , s 表示需要加载类的名称, flag 表示在调用该函数加载类的时候是否初始化静态区, classloader 表示加载该类所需的加载器。如下用的例子: Test test = new Test();//Test 类为自定义的一个测试类; ClassLoader cl = test. getClass().getClassLoader(); // 获取 test 的类装载器; Class c = Class.forName("TestClass", true, cl);
如果不用jvm的加载机制,可以自定义加载,如: URL url = new URL("file:/d:/test/lib/"); URLClassLoader urlCL = new URLClassLoader(new URL[]{url}); Class c = urlCL.loadClass("TestClassA"); TestClassA object = (TestClassA)c.newInstance();