zoukankan      html  css  js  c++  java
  • 疯狂Java讲义(十一)---- 初始化块

    •   普通初始化块  

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

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

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

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

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

    • 静态初始化块

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

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

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

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

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

  • 相关阅读:
    打酱油
    一个在线演示代码运行的网站
    java数据结构之枚举
    tomcat ; nginx ;mysql
    restful demo 演示; jquery min1.1;
    rest规范 ; restful 风格; gradel介绍 ; idea安装 ;
    jetty;tomcat;热部署
    web容器 web服务器 servlet/jsp容器 之间的区别和关系是什么?
    jetty;linux 目录结构
    servlet;jsp;cookies;session
  • 原文地址:https://www.cnblogs.com/IvySue/p/6298399.html
Copyright © 2011-2022 走看看