疯狂Java讲义---- 初始化块

Posted coder为

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了疯狂Java讲义---- 初始化块相关的知识,希望对你有一定的参考价值。

  •   普通初始化块  

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

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

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

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

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

 

  • 静态初始化块

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

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

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

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

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

以上是关于疯狂Java讲义---- 初始化块的主要内容,如果未能解决你的问题,请参考以下文章

《疯狂Java讲义》读书笔记4

java8--类加载机制与反射(java疯狂讲义3复习笔记)

《疯狂java讲义》读后感

学在前面——《疯狂JAVA讲义》学习笔记

疯狂Java讲义(第4版) PDF 电子书 百度云 网盘下载

《疯狂Java讲义》(十六)---- 枚举类