把上面这个MyCls类打成jar包,丢进ext classLoader的加载路径;
然后写出main类:
package org.corey.clsloader;
import org.corey.MyCls;
public class TheSameClsDemo {
/**
* @param args
*/
public static void main(String[] args) {
MyCls myClsOb=new MyCls("name");
myClsOb.say();
System.out.println(MyCls.class.getClassLoader());
System.out.println(System.getProperty("java.class.path"));
System.out.println(TheSameClsDemo.class.getClassLoader());
}
}
并且把MyCls类加入biild-path里面方便引用;
结果是:
name
sun.misc.Launcher$ExtClassLoader@16930e2
E:\workspace\ClassLoaderDemo\bin;E:\MyEclipse 6.0\jre\lib\ext\corey.jar
sun.misc.Launcher$AppClassLoader@7259da
从上面的例子可以清晰的看出ClassLoader之间的这种双亲委托加载模式;
再来看下一个例子(摘自http://bbs.cnw.com.cn/viewthread.php?tid=95389)
下面我们就来看一个综合的例子。首先在eclipse中建立一个简单的java应用工程,然后写一个简单的JavaBean如下:
package classloader.test.bean;
publicclass TestBean {
public TestBean() {}
}
在现有当前工程中另外建立一测试类(ClassLoaderTest.java)内容如下:
测试一:
publicclass ClassLoaderTest {
publicstaticvoid main(String[] args) {
try {
//查看当前系统类路径中包含的路径条目
System.out.println(System.getProperty("java.class.path"));
//调用加载当前类的类加载器(这里即为系统类加载器)加载TestBean
Class typeLoaded = Class.forName("classloader.test.bean.TestBean");