URLClassLoader加载类的路径

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

       写一个类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“即可成功加载类。

 

 


 


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值