对于很对方法,如何加载和寻找类,我做了一个小小的总结,这里用代码表示
A.java 和 B.java放在同一包下,再各种情况下,A如何寻找B,默认是在Eclipse编辑环境下
URL url = A.class.getProtectionDomain().getCodeSource()
.getLocation();
System.out.println(url);
结果(未打成JAR时):
file:/C:/Documents%20and%20Settings/Administrator.MICROSOF-B715C3/workspace/T/bin/
结果(打成JAR时)
file:/C:/Documents%20and%20Settings/Administrator.MICROSOF-B715C3/%e6%a1%8c%e9%9d%a2/1.jar
那么如何加载这个jar中的类呢
JarFile file = new JarFile(url.getFile());
接下来就是URLClassLoader得方法了,这部分参看我得另外一篇:http://blog.csdn.net/neusoftware_20063500/archive/2009/02/15/3894289.aspx
URL url = ClassLoader.getSystemResource("B.class");
System.out.println(url);
结果(未打成jar)
file:/C:/Documents%20and%20Settings/Administrator.MICROSOF-B715C3/workspace/T/bin/B.class
结果(打成jar)
jar:file:/C:/Documents%20and%20Settings/Administrator.MICROSOF-B715C3/%e6%a1%8c%e9%9d%a2/1.jar!/B.class
InputStream resourceAsStream = A.class.getResourceAsStream("B.class");
System.out.println(resourceAsStream);
结果(未打成jar)是class文件得流
java.io.BufferedInputStream@a90653
结果(打成jar)是jar得输入流
sun.net.www.protocol.jar.JarURLConnection$JarURLInputStream@de6ced