举例预先装载&按需装载

xiaoxiao2021-02-28  73

下面用几个例子来说明预先装载和按需装载的细节,具体理论请看java程序如何执行

1)预先装载

1.1)第一句输出,说明Bootstrap(类名无所谓,你改成Test一样行)这个类在程序启动时被加载了,(因为Java类被装载时,静态域代码会被执行)。为什么这个类一启动就会被加载呢?还不是main函数的第一句话,getClassLoader(),不然谁理你

1.2)第二句输出,说明是个叫AppClassLoader的类(它是Launcher的内部类),加载了Bootstrap这个类

1.3)第三句输出,说明AppClassLoader的父类是ExtClassLoader这个类

1.4)第四句输出,说明ExtClassLoader的父类是Bootstrap Loader

2)按需装载

2.1)装载条件

2.2)例子

解释:自己对照 2.1)装载条件看,自然能理解

3)加载器(各种Loader)的工作

某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载

4)父类和子类的加载顺序

解释:

当一个类具有继承关系时,装载时从顶级类开始的,依次类推直至加载到这个类本身

5)未初始化的静态引用

解释:可以看到Course类的静态域并没用被执行,也就是说Course类并没有被装载,符合按需转载的条件

6)初始化的静态引用

Teacher类中的

public static Course course;

改为

public static Course course = new Course(); //即使不加static,结果也一样

course进行初始化,改后的运行结果:

解释:new了一下,说明调用了Course类的构造函数,理应加载嘛,符合按需装载的条件

转载请注明原文地址: https://www.6miu.com/read-48600.html

最新回复(0)