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


    •   普通初始化块  

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

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

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

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

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

    • 静态初始化块

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

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

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

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

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

  • 相关阅读:
    CATIA 各个版本代号详解
    CATIA 基础详解 第01章 CATIA初认识
    CATIA 使用技巧--转换出轻巧的tif格式文件
    中国水墨动画系列 内容简介
    Python开发 第02课 Python 数据类型
    Python开发 第01课 Python 简介
    UG 常用设置
    matplotlib 学习笔记02:marker标记详解
    matplotlib 知识点13:绘制散点图(scatter函数精讲)
    matplotlib 知识点11:绘制饼图(pie 函数精讲)
  • 原文地址:https://www.cnblogs.com/IvySue/p/6298399.html
Copyright © 2020-2023  润新知