classLoader-加载器.doc_第1页
classLoader-加载器.doc_第2页
classLoader-加载器.doc_第3页
classLoader-加载器.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

java虚拟机与程序的生命周期下列情况将结束虚拟机:执行了System.exit()方法程序正常执行结束程序非正常终止(异常或错误)由于操作系统导致虚拟机进程终止。类的加载连接与初始化。加载:查找加载二进制数据(class文件)。连接: 验证:确保被加载类的正确 准备:为类的静态变量分配内存,并被其初始化为默认值。 解析:把类中的符号引用转换为直接引用。初始化:为静态变量赋予正确的初始化值。举例说明在连接中为静态变量分配默认值和在初始化中为静态变量赋予正确的初始化值的区别。package thinkmore.cb;class Singletonprivate static Singleton singleton = new Singleton();public static int counter1;public static int counter2 = 0;private Singleton()counter1+;counter2+;public static Singleton getInstance()return singleton;public class MyTestpublic static void main(String args)Singleton singleton = Singleton.getInstance();System.out.println(counter1 = + singleton.counter1);System.out.println(counter2 = + singleton.counter2);类初始化的时机与加载步骤:时机:java虚拟机会在每一个类或者是接口“首次主动使用”时才初始化它们。主动使用的六种情况:创建类的实例。访问某个类或接口的静态变量,或者对该静态变量附值。调用类的静态方法。反射(Class.forName(.)初始化一个类的子类虚拟机启动时被标明为启动类的类。被动使用:除了以上六种情况,其他情况都属于被动使用,都不会导致类的初始化。注:Class只有JAVA虚拟机才能创建他的对象。加载步骤: 如果这个类还没有被加载和连接,那就先进行加载和连接。如果这个类存在直接的父类,并且这个父类还没有被初始化,那就先初始化直接的父类。如果这个类中存在初始化语句,那么就依次执行这些初始化语句。举例证明加载步骤例一、 package thinkmore.cb;class Parentstatic int a = 3;staticSystem.out.println(Parent static block);class Child extends Parentstatic int b = 4;staticSystem.out.println(Child static block);public class Test4staticSystem.out.println(Test4 static block);public static void main(String args)System.out.println(Child.b);例二、 package thinkmore.cb;class Parent2static int a = 3;staticSystem.out.println(Parent2 static block);class Child2 extends Parent2static int b = 4;staticSystem.out.println(Child2 static block);public class Test5staticSystem.out.println(Test5 static block);public static void main(String args)Parent2 parent;System.out.println(-);parent = new Parent2();System.out.println(Parent2.a);System.out.println(Child2.b);例三、package thinkmore.cb;class Parent3static int a = 3;staticSystem.out.println(Parent3 static block);static void doSomething()System.out.println(do something);class Child3 extends Parent3staticSystem.out.println(Child3 static block);public class Test6public static void main(String args)System.out.println(Child3.a);Child3.doSomething();类加载器的类型java虚拟机自带的加载器根类加载器(Bootstrap) c+实现扩展类加载器(Extension) java实现系统类加载器(System, AppClassLoader) java实现用户自定义的类加载器 java.lang.ClassLoader的子类例:jdk所提供的类是根类加载器(Bootstrap)加载的,而根类加载器是由C+实现的,所以在java中没有任何一个类可以代表根类加载器,如果尝试获得根类加载器就会返回NULL。而我们自己定义的类是由AppClassLoader类加载器加载的。package thinkmore.cc;public class Singleton public static void main(String args) throws Exception Class c = Class.forName(java.util.List);System.out.println(c.getClassLoader();Class c2 = Class.forName(thinkmore.cc.A);System.out.println(c2.getClassLoader(); class A类加载器的顺序(层次结构)当命令模式下执行java.xxx.class指令后,java运行程序会尝试找到jre安装的所在目录,然后寻找jvm.dll(binclient目录中),接着启动jvm并进行初始化动作,产生Bootstrap Loader,Bootstrap Loader会加载Extended Loader 并设置Extended Loader的parent为Bootstrap LoaderBootstrap Loader还会加载System Loader,并将System Loader的parent设置为Extended Loader Bootstrap Loader通常由C语言编写而成,Extended Loader由java编写而成,对应于 sun.misc.launcher$ExtClassLoader(Launcher中的内部类)。System Loader也是java编写而成,对应于sun.misc.Launcher$AppClassLoader(Launcher中的内部类)。 java程序启动或加载类的顺序图,也就是类加载器层次结构根类加载器(Bootstrap Loader)的加载路径:该加载器没有父加载器。它负责加载虚拟机的核心类库,如java.lang.*等。Bootstrap Loader会搜索系统参数sun.boot.class.path中指定位置的类,默认是JRE所在目录的classes下的.class文件,或lib目录下的.jar文件中(例入:rt.jar)的类并加载,可以使用System.getProperty(“sun.boot.class.path”)句语来显示sun.boo.class.path中指定的目录,例如在我们计算机中显示的以下路径。D:Javajre1.5.0_02librt.jar;D:Javajre1.5.0_02libi18n.jar;D:Javajre1.5.0_02libsunrsasign.jar;D:Javajre1.5.0_02libjsse.jar;D:Javajre1.5.0_02libjce.jar;D:Javajre1.5.0_02libcharsets.jar;D:Javajre1.5.0_02classes扩展类加载器(ExtClassLoader)的加载路径 它的父类加载器为根类加载器,是由java编写而成,会搜索系统参数java.ext.dirs中指定位置的类并加载,使用System.getProperty(java.ext.dirs)语句来显示java.ext.dirs中指定的路,或者从JDK的安装目录的jrelibext子目录(扩展目录)下加载类库,如果把用户创建的JAR文件放在这个目录下,也会自动由扩展类加载器加载。扩展类加载器是JAVA编写,是ClassLoader类的子类。系统类加载器(AppClassLoader):System.Loader是由java编写而成,会搜索系统参数java.class.path中指定位置的类,也就是Classpath所

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论