ClassLoader相关知识

------------------JAVA程序员面试宝典----------------------------

基本概念:

       Java程序本身并不是一个可执行文件,而是由许多独立的类文件组成的,每一个文件对应一个Java类。此外,这些类文件并非全部装入内存,而是根据程序需要逐渐载入ClassLoader。Java有四种类加载器(程序要用到某个类的时候,将该类加载进内存),四个类加载器分别是:Bootstrap ClassLoader、Extension ClassLoader、APPClassLoader、URLClassLoader。

  • Bootstrap ClassLoader  启动类加载器,在JVM运行的时候加载Java核心的API,以满足Java程序最基本的要求。其中该加载器中可以包含用户自定义的ClassLoader,即Extension ClassLoader(用来加载Java的扩展API,/lib/ext中的类)和APPClassLoader(加载用户机器上CLASSPATH设置目录中的Class)
  • Extension ClassLoader
  • APPClassLoader
  • URLClassLoader

ClassLoader加载流程:

当一个程序运行时,JVM启动,运行Bootstrap ClassLoader,该ClassLoader加载Java核心API,然后调用Extension ClassLoader加载扩展API,最后APPClassLoader加载CLASSPATH目录下定义的Class。

类加载的过程中使用到了父类委托模式,其原因是首先可以避免重复加载,如果父类已经加载了该类,没有必要再为子类再加载一次;其次是出于安全考虑

ClassLoader常用的方法:

  • ClassLoader.loadClass(String name,boolean resolve);是ClassLoader的入口,name是JVM需要的类的名称,resolve告诉方法是否需要解析类。
  • defineClass方法:接受由原始字节组成的数组,并把它转换成Class对象。
  • findSystemClass方法:从本地文件系统装入文件。在本地文件系统中寻找类文件,如果存在,就用defineClass将原始字节转换成Class对象。
  • resolveClass方法:带解析和不带解析的装入类
  • findLoadClass方法:充当缓存器,如果已装载该Class,则不再装载
  • findClass方法:loadClass默认实现调用这个新方法
  • getSystemClassLoader方法:
  • forName方法:与loadClass功能相似,当使用forName方法会将Class进行解释和初始化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值