jvm

本文介绍了Java中类加载的双亲委派模型,解释了为何采用此模型以避免类的重复加载,并详细阐述了JDK内置的类加载器及如何创建自定义类加载器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么使用双亲委派模型?
ClassLoader在加载类的时候,必须先把任务委托给父类加载器,如果说父类加载器没有加载到这个类的时候,就反回来委托给它的发起者,又发起者自己本身来加载这个类,如果自己都没有加载成功的话,就会报类加载不到异常ClassNotFoundException,使用双亲委派模型主要是为了避免类的重复加载.也就是说当我们的父类已经加载这个类的时候,就没有必要子类加载这个类.
JDK已有的类加载器:
1.BootStrap ClassLoader:启动类加载器使用C++编写,主要加载lib下的rt.jar
2.Extension ClassLoader :都会继承ClassLoader,主要加载%JAVA_HOME%/lib/ext/*.jar
3.App ClassLoader:都会继承ClassLoader,主要加载ClassPath
4.自定义类加载器:也必须继承ClassLoader,完全自己定义加载路径

自定义类加载器

1.继承MyClassLoadder extends ClassLoader
2.重写findClass方法
3.定义一个成员变量,加载类的路径,可以给类加载器定义个一个名称 String path,String name,加上有参构造方法
public MyClassLoader(String name,String path){
   super();//让系统类加载器称为该类的父加载器
   this.name = name;
   this.path = path;
}

4.加入父类加载器的构造方法
public MyClassLoader(ClassLoader parent,String name,String path){
   super(parent);//显示指定父类加载器
   this.name = name;
   this.path = path;
}
重写findClass方法是为了加载我们自定义的类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值