JVM之类加载器(ClassLoader)基本介绍

        类加载器用于将class文件加载到JVM中去执行。下面介绍类加载器涉及到的基本概念和加载基本过程。


一、Java虚拟机与程序的生命周期

        在运行Java程序时,会启动JVM进程,该进程中会使用一个线程去执行我们的Java程序。在如下几种情况下,Java虚拟机将结束生命周期:

        1.执行了System.exit(0)(内部调用了Runtime.getRuntime().exit(n)),如果是非0参数表示异常退出。

        2.程序正常结束

        3.程序在执行过程中遇到了异常或错误而导致异常终止。如果异常没有try-catch而一直throw,那么一直throw到main方法,

              main方法还不处理的化那就会throw给JVM,JVM看到异常就会结束运行。

        4.由于操作系统错误而导致的Java虚拟机进程终止


二、类的加载、连接与初始化

        加载:查找并加载类的二进制数据到JVM

        连接:分为三个步骤

                Ø  验证:确保被加载类的正确性

                Ø  准备:为类的静态变量分配内存,并将其初始化为默认值

                Ø  解析:把类中的符号引用转换为直接引用

        初始化:为类的静态变量赋予正确的初始值。(就是在类中定义变量时赋予的默认值)

       

        以上的过程中并不会初始化对象变量,因为此时并不存在任何对象,只是将类的class文件数据加载到内存中,对象的生成是在该过程完成之后。


        类中的静态代码块是按照声明的顺序执行的,例如:

        static int  a;

        static {

               a=1;

        }

        static{

               a=2;

        }

        此时a的最终值是2,如果两个代码块颠倒顺序,那么a的最终值就是1。


三、类的主动使用与被动使用

        Java程序中对类的使用可以分为两种:主动使用 被动使用

        1.Java程序对类的主动使用的情况

        > 创建类的实例

        > 访问某个类或接口的静态变量,或者对该静态变量赋值

        > 调用类的静态方法

        > 通过反射访问类,例如Class.forName(“package.ClassName”)

        > 初始化一个类的子类,或访问子类的静态变量或静态方法也是对父类的主动使用。

        > Java虚拟机启动时被标注为启动类的类,例如JUnit中的TestCase类。


        所有的Java虚拟机实现必须在每个类或接口被Java程序首次主动使用时才初始化它们。因此Java虚拟机只有在一个类第一次

发生上面的六种情况时才会初始化该类,仅第一次主动使用时初始化。

        除了以上的主动使用的情况,其它的情况都是对类的被动使用,因此都不会导致类的初始化。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值