学习笔记 自定义类加载器

1.简易自定义类加载器

自定义一个类去继承URLClassLoader类 重写其中的构造器

   public class MyClassLoader extends URLClassLoader {
    public MyClassLoader(URL[] urls, ClassLoader parent) {
        super(urls, parent);
    }
   }    

然后就可以去使用了 

 public static void main(String[] args) throws MalformedURLException, ClassNotFoundException {
            File file = new File("E:\\classloadertest");//这是类加载器扫描的根路径
            URL[] urls = {file.toURI().toURL()};

            //使用自己的类加载器
            MyClassLoader classLoader =
            new MyClassLoader(urls, null);//null 设置不用父类 打破双亲委派,也可以用 就会连父 
            //类的扫描路径也会去看
            Class<?> aClass = classLoader.loadClass("Hellow");//会按根路径加这个路径去 
            //找 注意 :就算找到了如果package不对的话会报错
            System.err.println(aClass.getClassLoader());
            System.err.println(aClass.getClassLoader().getParent());
            System.err.println(aClass.getName());
        }

这是在E:\\classloadertest  里有各Hellow.class文件   如果这个源码的包不对的话会报错

这是路径下的源码

package text;
public class Hellow {
    public int a=10;
    static {
        System.out.println("static");
    }
    public Hellow() {
        System.out.println("Hellow()");
    }
}

这时候就会报错

Exception in thread "main" java.lang.NoClassDefFoundError: Hellow (wrong name: text/Hellow)

如果是.loadClass("text.Hellow") 并且在电脑上 这个.class文件也在路径下的text文件夹里  package也对的上 那就不会报错,结果如下

com.example.tests.classloader.MyClassLoader@3cd1a2f1
null
text.Hellow

2.自定义类加载器

自定义一个类去继承ClassLoader类 重写方法protected Class<?> findClass(String className) throws ClassNotFoundException


public class MyClassLoader2 extends ClassLoader{
    private String baseDir;
    //利用构造函数传入要扫描的路径
    public MyClassLoader2(String baseDir){
        this.baseDir=baseDir;
    }

    @Override
    protected Class<?>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值