java 双亲委派模型

本文介绍了Java类加载器中的双亲委派模型工作原理。该模型要求除顶层类加载器外,所有类加载器都有自己的父加载器,并遵循从顶层开始的加载请求传递流程。只有当父加载器无法完成加载请求时,子类加载器才会介入。

双亲委派模型要求除了顶层的类加载器外,其余的类加载器都应当有自己的父类加载器。这里的类加载器之间的父子关系一般不会以继承的关系来实现,而都是以组合的关系来复用父加载器的代码。

双亲委派模型的工作过程是:如果一个类加载器 收到了类加载器的请求,它首先不会自己去尝试加载这个类,而是把这个类委托给父类加载器去完成,每个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求(它的搜索范围没有找到所需的类)时,类加载器才会尝试自己去加载。

双亲委派模型的实现:先检查是否已经被加载过,若没有加载则调用父类加载器的loadClass()方法,若父加载器为空则默认使用启动类加载器作为父加载器。如果父类加载失败,抛出ClassNotFoundException异常后,在调用自己的findClass()方法进行加载。

protected synchronized Class<?> loadClass(String name,boolean resolve) throws ClassNotFoundException{
		//首先检查请求的类是否被加载过了
		Class c=findLoadedClass(name);
		if(c==null){
			try{
				if(parent!=null){
					c=parent.loadClass(name,false);
				}else{
					c=findBootstrapClassOrNull(name);
				}
			}catch(ClassNotFoundException e){
				//如果父类加载器抛出classNotFoundException
				//说明父类加载器无法完成加载请求
			}
			if(c==null){
				//在父类加载器无法加载的时候
				//在调用本身的findClass方法来进行类加载
				c=findClass(name);
			}
		}
		if(resolve){
			resolveClass(c);
		}
		return c;
	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值