Chinaunix首页 | 论坛 | 博客
  • 博客访问: 395595
  • 博文数量: 70
  • 博客积分: 1919
  • 博客等级: 上尉
  • 技术积分: 1179
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-24 20:05
文章分类

全部博文(70)

文章存档

2014年(2)

2013年(29)

2012年(20)

2011年(1)

2010年(13)

2009年(5)

分类: Java

2013-09-29 11:42:23

第七章 虚拟机类加载机制
一 类的生命周期:
    加载,验证,准备,解析,初始化,使用,卸载。
二 类的加载机制
   四种必须初始化的情况:
        1.遇到new,getstatic,pubstatic或invokestatic这四条字节吗指令时,如果没有进行过初始化,则需要进行触发其初始化
    2.使用反射包的方法对类进行反射调用的时候,如果类没有进行初始化,则需要先触发类的初始化
    3.当初始化一个类时,如果发现其父类还没初始化,则需要先触发其父类的初始化
    4.当虚拟机启动时,用户需要一个要执行的主类(包含main方法的类),虚拟机会初始化这个主类
   被动引用:
    1.通过子类引用父类的静态字段,不会导致子类的初始化,
    2.通过数组定义来引用类,不会触发此类的创建
    3.常量在编译阶段会存入调用类到常量类中,本质上没有引用到定义常量的类,因此不会触发定义常量的类的初始化
三 接口的加载机制
   接口的加载过程与类的加载过程稍有一些不同,类可以用static{}来输出初始化信息,而接口不能用static{}来输出初始化信息,但编译器会为接口生成()构造器,用于初始化接口中所定义的成员变量
   接口与类的真正区别:
    当初始化一个类时,如果发现其父类还没初始化,则需要先触发其父类的初始化,但接口初始化并不要求其父类接口全部完成初始化,只有真正用到了父类接口才会初始化
阅读(986) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~