举例预先装载&按需装载

来源:互联网 发布:评论滚动效果php 编辑:程序博客网 时间:2024/05/20 10:54

下面用几个例子来说明预先装载和按需装载的细节,具体理论请看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类的构造函数,理应加载嘛,符合按需装载的条件



原创粉丝点击