JAVA学习之JVM加载class

1.java中的所有类,必须被装载到JVM中才能运行,这个装载工作是由JVM中的类加载器完成的,类加载器所做的工作实质是就是将类加载到JVM中。
2.java中部高的类大致分为三种:
1)系统类
2)扩展类
3)由程序员自定义的类
3.类装载方式分为两种:
1)隐式装载:程序在运行过程中当遇到通过new()等方式生成对象时,隐式调用类加载器加载对应的类到JVM中;
2)显式装载:通过class.forname()等方法,显式加载需要的类;
4.java类加载器:三层结构
     Bootstrap Loader--负责加载系统类
         |
       --ExtClassLoader--负责加载扩展类
             |
           --AppClassLoader--负责加载应用类

在这里java采用了委托模型机制,这个机制简单来讲,就是“类装载器有载入类的需求时,会先请示其Parent使用其搜索路径帮忙载入,如果Parent 找不到,那么才由自己依照自己的搜索路径搜索类”。

Public class Test{
    Public static void main(String[] arg){
      ClassLoader c  = Test.class.getClassLoader();  //获取Test类的类加载器
      System.out.println(c); 

      ClassLoader c1 = c.getParent();  //获取c这个类加载器的父类加载器
      System.out.println(c1);

      ClassLoader c2 = c1.getParent();//获取c1这个类加载器的父类加载器
      System.out.println(c2);
  }
}

运行结果:
    AppClassLoader
    ExtClassLoader
    Null
由于Bootstrap Loader是用C++语言写的,依java的观点来看,逻辑上并不存在Bootstrap Loader的类实体,所以在java程序代码里试图打印出其内容时,我们就会看到输出为null。

5.JVM加载class文件的原理机制:
1)装载:查找和导入Class文件
2)链接:检查文件是否正确,给变量分配空间,将符号引用转成直接引用;
3)初始化:对静态变量,静态代码块执行初始化工作;
类装载器ClassLoader是一个抽象类,类装载工作由ClassLoader和其子类负责,会产生三个ClassLoader:根装载器。ExtClassLoader、AppClassLoader;其中,根目录不是ClassLoader的子类,负责装载JRE的核心类库;ExtClassLoader是ClassLoader的子类,负责装载JRE扩展目录ext下得jar类包;AppClassLoader是ExtClassLoader的子类,负责装载classpath路径下得类包。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值