类加载器

1、加载
过程:取得类的二进制流,转为方法区数据结构,在JAVA堆中生成对应的java.lang.Class对象
2、链接
2.1、验证
文件格式验证:文件格式,版本号
元数据验证:是否有父类,是否继承final类,非抽象类是否实现了抽象类的所有方法
字节码验证:运行检查(堆栈使用是否长度一致),是否跳转到合理位置
符号验证:常量池中是否存在,访问的方法和字段是否能访问
2.2、准备
分配内存,在准备阶段public static int i = 1;在此阶段,i==0,如果是static final则==1
2.3、解析
符号引用替换为直接引用,符号引用不一定被实例化,直接引用可以是变量(指向对象的指针)
3、初始化
过程:执行类构造器(线程安全),先执行父类的,再调用子类的 。static变量和static{}会先执行。

Java.lang.NoSuchFiledError

ClassLoader类加载器
1、是一个抽象类
2、实例的作用能将JAVA字节码装载到JVM中
3、可以定制,以满足不同的字节流获取方式
4、负责类加载过程中的加载阶段

方法:
loadClass(String name);//加载并返回一个类
defindClass(byte[] b,int off,int len);//定义一个类,不公开调用
findClass(String name);//loadClass回调该方法,自定义classloader的推荐做法
findLoaderClass(String name);//寻找已经加载的类

JDK中ClassLoader设计默认-分类、协同工作
Bootstrap ClassLoader(启动ClassLoader)
Extension ClassLoader(扩展ClassLoader)
App ClassLoader(应用ClassLoader/系统ClassLoader)
Custorn ClassLoader(自定义ClassLoader)
注:每个ClassLoader都有一个Parent作为父类,程序启动时,JVM默认,类加载器的检查顺序是自底向上找到就返回,而运行类加载器类加载类的顺序是自顶向下,一个类只会加载一次,默认都是请求父类加载该类!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值