[size=medium]
(.class文件加载的过程)由(加载)和(定义)两步完成
(加载)是loadClass()方法
(定义)是defineClass()方法
其中loadClass()中会调用defineClass()方法
每一个类加载器都有自己的控制区间(classpath)
过程:
(系统 类加载器)会最先loadClass()某一个.class文件,
然后在自己的loadClass()方法里调用父类加载器的loadClass()
求证.class文件是不是在父类加载器(扩展 类加载器)的控制范围之内
但(扩展 类加载器)没有求证就调用父类加载器的loadClass()
求证.class文件是不是在父类加载器(引导 类加载器)的控制范围之内
如果是则(引导 类加载器)调用defineClass()给出这个.class文件的Class类实力
如果不是则再问子类加载器(扩展 类加载器)是不是在其控制区域内
如果是则(扩展 类加载器)调用defineClass()给出这个.class文件的Class类实力
如果不是则再问子类加载器(系统 类加载器)是不是在其控制区域内
如果是则(系统 类加载器)调用defineClass()给出这个.class文件的Class类实力
所有被(定义)出来的Class类的实例会被缓存一段时间。
[/size]
(.class文件加载的过程)由(加载)和(定义)两步完成
(加载)是loadClass()方法
(定义)是defineClass()方法
其中loadClass()中会调用defineClass()方法
每一个类加载器都有自己的控制区间(classpath)
过程:
(系统 类加载器)会最先loadClass()某一个.class文件,
然后在自己的loadClass()方法里调用父类加载器的loadClass()
求证.class文件是不是在父类加载器(扩展 类加载器)的控制范围之内
但(扩展 类加载器)没有求证就调用父类加载器的loadClass()
求证.class文件是不是在父类加载器(引导 类加载器)的控制范围之内
如果是则(引导 类加载器)调用defineClass()给出这个.class文件的Class类实力
如果不是则再问子类加载器(扩展 类加载器)是不是在其控制区域内
如果是则(扩展 类加载器)调用defineClass()给出这个.class文件的Class类实力
如果不是则再问子类加载器(系统 类加载器)是不是在其控制区域内
如果是则(系统 类加载器)调用defineClass()给出这个.class文件的Class类实力
所有被(定义)出来的Class类的实例会被缓存一段时间。
[/size]