类记载器和双亲委派机制

2020-04-08  本文已影响0人  salix_

一:类加载器分类

1. 系统类加载器(用c++写的)

2. 自定义类加载器(用java写的)

  1. 定义:派生于ClassLoader类的类加载器。
  2. 自定义类是AppClassLoader加载的(包括一些外部导入的jar包),AppClassLoader的父加载器是ExtClassLoader(补充BootStrap Classlodaer加载扩展的类库,jre/lib/ext下面的包等等)。ExtClassLoader的父加载器是Boootstrap ClassLoader。

二:双亲委派机制

AppClassLoader的父加载器是ExtClassLoader。ExtClassLoader的父加载器是Boootstrap ClassLoader。他们并不是java中的extends关系,而是我们自己规定的等级,谁是谁的父亲,所谓双亲委派机制(又叫坑爹机制),爸爸能干的活自己绝对不干,直接任务往上派发。

有啥用?
  1. 避免类的重复加载
  2. 安全啊,比如我在主目录下建立一个java.lang.String的自定义类(注意跟java库中的报名是一样的哦),然后我们new我们自己定义的String,会发现其实new的还是java库中的类。如果java机制是new了我们自己定义的类。那你写项目的时候,我趁你不注意,偷偷自己实现一个盗版的String放到你的项目上(在java库String上加点bug),你会不会崩溃?
    AppClassLoader可以引入,就给父亲,ExtClassLoader也可以搞就继续往上传,BootStrap ClassLoader也可以加载(并且它没有父亲了),它就只能自己弄了(造福子孙,孩子们少干点),就避免了AppClassLoader(用来加载自定义类)加载自定义类产生安全问题。
上一篇 下一篇

猜你喜欢

热点阅读