类加载机制

类加载机制
    叙述:类加载机制就是将.class文件加载到JVM,并形成class对象的机制。之后就可以对其实例化并使用,这个机制可以动态的加载外部的类、远程下载的class文件,并且可以做到类之间的隔离。
    步骤:JVM加载的步骤:装载、链接、初始化。
            装载:将class文件中的字节码加载到JVM,并通过全名(org.test.Test)和类加载器(ClassLoader)来加载到JVM中。
            链接:负责对装载的二进制字节码的格式进行检验,初始化类中的静态标量并检查类中调用的接口、类。最后对所有的属性、方法进行检验。
         初始化:初始化是执行静态初始化代码、构造器代码和静态属性的初始化
                    出发的方式:1.new 2.反射 3.子类调用初始化 4.JVM启动参数中的类
ClassLoader:有4种ClassLoader负责加载类。
    1.Bootstrap ClassLoader
        由C++实现的,来加载jre/lib/rt.jar、resources.jar等。在java中无法拿到此对象。
    2.Extension ClassLoader
        用来加载java扩展包,jre/lib/ext/*.jar。
    3.System ClassLoader
        用来加载参数中的指定的classpath的jar,在类中显示对应的是AppClassLoader。
    4.User-Defined ClassLoad
        是java开发人员继承ClassLoader抽象类自行实现的ClassLoader,可以加载非classpath中的类(网络下载的java、class),还可以在加载之前做一些事情。

加载顺序:
     首先要说明一个误区,这个误区是经常理解有问题的。
        classloader加载的只是class(类),不要认为它加载的是对象,这样你就会很是理解不了classloader加载顺序。
        classloader的顺序是先父后子(这里因为Bootstrap ClassLoader在java中拿不到,所以他是最先完成加载的)
        已委托的方式循序加载
        例如:User-Defined ClassLoad有个一类要加载则先会去委托System ClassLoader加载依此类推,每个节点都会委托父节点去加载,
                如果父节点没有加载到自己再去加载,如果父节点加载了将把加载的引用返回给自己。
        两个java类相同的条件不尽需要同样的包名和class而且加载器也必须相同,这样的类才算是统一各类。比如有classloaderA和classloaderB,都加在了
Test类,两次别加载的类是不一样的。这也体现出了隔离性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值