第三讲 类的验证,准备,解析和初始化

       1.(类的验证)类被加载后,就进入连接阶段。就是将已经读入到内存的类的二进制数据合并到虚拟机的运行时环境中去。

       类验证的内容

                (1)类文件的结构检查

                           确保类文件遵从java类文件的固定格式

                (2)语义检查

                           确保类本身符合java语言的语法规定,如验证final类型的类有没有子类,以及final类型的方法有没有被覆盖

                (3)字节码验证

                           确保字节码流可以被java虚拟机安全的执行,字节码流代表java方法(包括静态方法和实例方法),它是由被称为操作码的单字节指令组成的序列,每个操作码后都跟着一个或者多个操作数。字节码验证步骤会检查每个操作码是否合法,即是否有着合法的操作数

                 (4)二进制兼容性的验证

                           确保相互引用的类之间的协调一致

  

        2.(类的准备)在准备阶段,虚拟机为类的静态变量分配内存,并设置默认的初始值。例如如下代码

public static int a=4;
public static long b=5;
static {
    b=8;
}

            在准备阶段的int类型的静态变量分配4个字节内存空间,并赋予默认值0,为long类型的静态变量分配8个字节内存空间,并赋予默认值0

       3.(类的解析阶段)虚拟机会把类的二进制数据中的符号引用替换为直接引用。如car类中的run方法会引用stop方法

public class car{
    public static void run(){

    }
    public void stop(){
        Test2.run();
    }

}

   

           4.(类的初始化)虚拟机执行类的初始化语句,为类的静态变量赋予初始值,在程序中,静态变量的初始化由两种途径:

                    (1)在静态变量的声明处进行初始化

                     (2)在静态代码块中进行初始化,例如静态变量a和b都被显示初始化,而静态变量c没有被显示初始化,它将保持默认值0

public static int a=4;
public static long b;
public static long c;
static {
    b=8;
}




     

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值