URLClassLoader加载类的路径
2014-06-10 17:24
274 查看
先看用java命令执行程序的一个例子:
写一个类A.java,编译生成A.class文件:
(1)将A.class文件放置在D:/下,进入D:/,执行“java A”命令,出错:
(2)将A.class放置在D:/aaa/bbb/下,进入D:/aaa/bbb/,执行“java A”,报错同上。
(3)将A.class放置在D:/aaa/bbb/下,在D:/下执行“java aaa/bbb/A”或”java aa.bbb.A“,成功。
java文件里面加了package,那么类的全名其实就是“包名.类名”,因此第一种测试,在当前目录下(classpath)存在一个名为aaa.bbb.A的类文件,而不是参数中的A,因此提示wrong
name。所以java命令中的参数与类全名(即包名+类名)必须是一致的!!且执行java命令的目录应在package的目录层次之外。
对URLClassLoader中URL加载路径的指定也是如此,将上述的A.class放置在D:/aaa/bbb下,再写一个类B.java,编译后B.class放在E:/下:
进入E:/,执行”java B A“,提示找不到类,错误如下:
因为程序中指定的加载路径为”file:/D:/aaa/bbb/“,该路径下有一个名为”aaa.bbb.A“的类,而参数中指定的是”A“,因此会提示wrong name。如果执行”java B aaa.bbb.A“,依然会出现上述错误,因为此时的搜索路径为”file:/D:/aaa/bbb/aaa/bbb/A“。正确的路径不应该包含类的包目录,就像执行java命令一样,因此应将程序中URL参数更改为”file:/D:/“,然后执行”java B aaa.bbb.A“即可成功加载类。
写一个类A.java,编译生成A.class文件:
package aaa.bbb; class A {}
(1)将A.class文件放置在D:/下,进入D:/,执行“java A”命令,出错:
(2)将A.class放置在D:/aaa/bbb/下,进入D:/aaa/bbb/,执行“java A”,报错同上。
(3)将A.class放置在D:/aaa/bbb/下,在D:/下执行“java aaa/bbb/A”或”java aa.bbb.A“,成功。
java文件里面加了package,那么类的全名其实就是“包名.类名”,因此第一种测试,在当前目录下(classpath)存在一个名为aaa.bbb.A的类文件,而不是参数中的A,因此提示wrong
name。所以java命令中的参数与类全名(即包名+类名)必须是一致的!!且执行java命令的目录应在package的目录层次之外。
对URLClassLoader中URL加载路径的指定也是如此,将上述的A.class放置在D:/aaa/bbb下,再写一个类B.java,编译后B.class放在E:/下:
import java.net.*; import java.io.*; public class B { public static void main(String[] args) throws Exception { URL u = new URL("file:/D:/aaa/bbb/"); URLClassLoader loader = new URLClassLoader(new URL[] {u}); Class c = loader.loadClass(args[0]); } }
进入E:/,执行”java B A“,提示找不到类,错误如下:
因为程序中指定的加载路径为”file:/D:/aaa/bbb/“,该路径下有一个名为”aaa.bbb.A“的类,而参数中指定的是”A“,因此会提示wrong name。如果执行”java B aaa.bbb.A“,依然会出现上述错误,因为此时的搜索路径为”file:/D:/aaa/bbb/aaa/bbb/A“。正确的路径不应该包含类的包目录,就像执行java命令一样,因此应将程序中URL参数更改为”file:/D:/“,然后执行”java B aaa.bbb.A“即可成功加载类。
相关文章推荐
- URLClassLoader加载类的路径
- URLClassLoader加载jar包
- 利用URLClassLoader加载class到当前线程
- 探索《How Tomcat Work》 心得(六) 加载器 下 Java中URL、tomcat加载器WebappLoader和WebappClassLoader
- URLClassLoader加载class到当前线程类加载器
- 运用URLClassLoader加载外部jar包的java类,生成Class文件
- weblogic10.3加载status2报错 unable to attain an URLClassLoader - [unknown location]
- URLClassLoader使用方法和实例 类加载器
- URLClassLoader加载class到当前线程类加载器
- 利用URLClassLoader加载两个位置的Class
- 类路径分析Java的类加载器与ClassLoader(二):classpath与查找类字节码的顺序,分析ExtClassLoader与AppClassLoader的源码
- 类加载器[3]自定义类加载器[2]:URLClassLoader
- ClassLoader,URLClassLoader,类的动态加载!
- 【java】动态加载类-URLClassLoader
- URLClassLoader加载class到当前线程类加载器
- 使用URLClassLoader动态加载类
- Class.getResourceAsStream和ClassLoader.getResourceAsStream加载文件路径问题
- Java使用URLClassLoader加载指定位置的类
- Java运行时动态加载类之URLClassLoader
- Java中各类ClassLoader加载时资源搜索路径