JVM(三) 类的加载、连接与初始化

    

1、加载:查找并加载类的二进制数据

2、连接:

*验证:确保被记载的类的正确性

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

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

分析一下:

public class Test
{
     private static int a = 3;
}

3、初始化:为类的静态变量赋予正确的初始值

大家误以为3是直接赋值给a的,其实不然;首先在连接的准备阶段,a被赋值为0,因为int型的默认值为0。在初始化的时候才将3赋值给a.


在第一遍博肯《JVM(一) 一个小程序吸引了我》拓展到关于Java程序对类的使用方式,这里再回顾一下:

Java程序对类的使用方式可分为两种:

主动使用和被动使用

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

主动使用有六种:

1、创建类的实例

例:new Test();

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

例:int b=Test.a;

Test.a=b;

3、调用类的静态方法

例:Test.doSomething();

4、反射

例:Class.forName("come.tgb.Test");

5、初始化一个类的子类

例:class Parent{}

class child extends Parent

{public static int a =3;}

Child.a=4;

6、Java虚拟机启动时被标明为启动类的类

例:Test.java可能被编译成多个类文件,Test.class, Parent.class, Child.class,最终运行java Test,那么Test.class就是启动类。

除了以上6种情况,其他使用Java类的方式都被看看作是对类的被动使用,都不会导致类的初始化。





评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值