码迷,mamicode.com
首页 > 编程语言 > 详细

疯狂Java讲义(十一)---- 初始化块

时间:2017-01-19 00:52:04      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:依次   需要   static   静态初始化   静态   指定   返回   二次   --   

  •   普通初始化块  

  一个类里可以有多个初始化块,相同类型的初始化块之间有顺序:前面定义的先执行,后面定义的后执行。

  初始化块的修饰符只能是static,使用static修饰的初始化块被称为静态初始化块。

  普通初始化块、声明实例属性指定的默认值都可认为是对象的初始化代码,执行顺序与声明顺序相同。

  当Java创建一个对象时,系统先为该对象的所有实例属性分配内存(前提是该类已经被加载过了),接着程序开始对这些实例属性执行初始化,初始化顺序为:先执行初始化块或声明属性时制定的初始值,再执行构造器里指定的初始值。

  与构造器类似的,创建一个Java对象时,不仅会执行该类的普通初始化块和构造器,系统会一直追溯到Object类,先执行Object类的初始化块,然后是Object的构造器,依次向下执行其父类的初始化块、父类的构造器。。。最后才执行该类的初始化块和构造器,返回该类的对象。

 

  • 静态初始化块

  静态初始化块是类相关的,系统将在类初始化阶段执行静态初始化块,而不是在创建对象时才执行。因此静态初始化块总比普通初始化块要早。而且它只能初始化类属性,不能对实例属性进行初始化。

  系统在类初始化阶段执行静态初始化块时,不仅会执行本类的静态初始化块,还会上溯到Object类,父类的静态初始化块,最后才是该类的静态初始化块,只有当类初始化完成后,才可在系统中使用这个类。

  第一次创建某个类对象时,因为系统中并不存在该类,因此需要先加载并初始化这个类,初始化时会先执行其顶层父类的静态初始化块,然后是直接父类的静态初始化块,最后才执行该类本身的静态初始化块。一旦该类初始化完成后,它就会在虚拟机里一直存在,所以第二次创建对象时无需调用该类的静态初始化块。

  真正开始创建该类对象时,先执行最顶层父类的初始化块、构造器,然后再执行其父类的初始化块、构造器、、、最后才执行该类自己的初始化块、构造器。

  Java系统加载并初始化某个类,总是保证该类所有父类(包括直接父类和间接父类)全部加载并初始化。

疯狂Java讲义(十一)---- 初始化块

标签:依次   需要   static   静态初始化   静态   指定   返回   二次   --   

原文地址:http://www.cnblogs.com/IvySue/p/6298399.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!