类与类加载器

类与类加载器:
https://blog.csdn.net/qq_37971464/article/details/94967166 此篇记录了有关类加载的内容,下面接着讲解类与类加载器

对于任意一个类,都需要由加载它的类加载器与这个类本身一同确定其在Java虚拟机中的唯一性;怎么理解这句话呢?每一个类加载器都有独立的类名称空间,即只有这两个类来源于同一个Class文件,被同一个类加载器加载,才能表明这两个类相同,两个条件缺一不可。

从Java虚拟机的角度来侃,只存在两种不同的类加载器;
1.启动类加载器:使用C++语言实现,是虚拟机的一部分

2.所有其他的类加载器:由Java语言实现,独立于虚拟机外部,并且全部继承自java.lang.ClassLoader。

从Java开发人员的角度来看,存在三种类加载器;
1.启动类加载器:其无法被java程序直接引用,用户在编写自定义类加载器时,如果需要把加载请求委派给引导类加载器(启动类加载器),那直接使用null即可;

2:扩展类加载器:其由sun.misc.Launcher$ExtClassLoader实现,它负责
< JAVA_HOME >\lib\ext目录中的,或者被java.ext.dirs系统变量所指定的路径中的所有类库,开发者可以直接使用扩展类加载器;

3:应用程序类加载器:其由sun.misc.Launcher$AppClassLoader实现,它是由ClassLoader中的getSystemClassLoader()得到,它负责加载用户类路径上所指定的类库,开发者可以直接使用这个类加载器。如果没有自定义的类加载器,这个就是程序默认的类加载器。

双亲委派模型:
在这里插入图片描述

双亲委派模型的工作过程:如果一个类加载器收到了类加载的请求,它会首先将请求传给它的父加载器,依次向上传递,这样最终会传送给顶层的启动类加载器;如果父类无法完成这个加载请求,子类才会尝试自己去加载。

使用双亲委派模型的好处:Java类随着它的类加载器具备了一种带有优先级的层次关系,这样就保证了顶层类的唯一。

双亲委派模型的三次破坏
1.双亲委派模型是在JDK1.2之后出现的,可是类加载器和抽象类java.lang.ClassLoader在JDK1.0就已存在。为了向前兼容,在java.lang.ClassLoader中添加了一个protected的方法findClass()。

2.使用线程上下文加载器,即父类加载器使请求子类加载器去完成类加载。

3.追求程序动态性。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值