URLClassLoader加载类的路径

先看用java命令执行程序的一个例子:

       写一个类A.java,编译生成A.class文件: 

[java]  view plain  copy
  1. package aaa.bbb;  
  2. 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:/下:

[java]  view plain  copy
  1. import java.net.*;  
  2. import java.io.*;  
  3.   
  4. public class B {  
  5.     public static void main(String[] args) throws Exception {  
  6.         URL u = new URL("file:/D:/aaa/bbb/");  
  7.         URLClassLoader loader = new URLClassLoader(new URL[] {u});  
  8.         Class c = loader.loadClass(args[0]);  
  9.     }  
  10. }  

      进入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“即可成功加载类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值