zoukankan      html  css  js  c++  java
  • Java中的初始化块、构造器、静态初始化块的执行顺序

    概念

    静态初始化块:用来对类进行初始化(又称为类初始化)

    初始化块:用来对对象进行初始化

    构造器:创建一个对象时,调用的方法。可以进行初始化,默认有一个无参数构造器,但一旦自己写了有参数构造器后,系统就不会再提供默认的无参数构造器了。

    执行顺序

    静态初始化块  (并且只执行一次)当第一次使用到该类时,JVM加载该类,进行类初始化,一旦加载成功就永在JVM内存中,直到JVM退出。
    初始化块
    构造器

    另外:初始化某个类时,总是先初始化该类的所有父类(包括直接父类和间接父类)。

    1. 代码(参考《疯狂java》)

    public class ConversionTest
    {
        public static void main(String [] args)
        {
            new Leaf();
            new Leaf();
        }
    }
    /* 结果:
    Root 静态初始化块
    Mid 静态初始化块
    Leaf 静态初始化块
    Root 普通初始化块
    Root 构造器
    Mid 普通初始化块
    Mid 构造器
    Leaf 普通初始化块
    Leaf 构造器
    Root 普通初始化块
    Root 构造器
    Mid 普通初始化块
    Mid 构造器
    Leaf 普通初始化块
    Leaf 构造器
    */
    
    class Root
    {
        //静态初始化块
        static{ System.out.println("Root 静态初始化块"); }
        //初始化块
        { System.out.println("Root 普通初始化块"); }
        //构造器
        public Root(){ System.out.println("Root 构造器"); }
    }
    class Mid extends Root
    {
        //静态初始化块
        static{ System.out.println("Mid 静态初始化块"); }
        //初始化块
        { System.out.println("Mid 普通初始化块"); }
        //构造器
        public Mid(){ System.out.println("Mid 构造器"); }
    }
    class Leaf extends Mid
    {
        //静态初始化块
        static{ System.out.println("Leaf 静态初始化块"); }
        //初始化块
        { System.out.println("Leaf 普通初始化块"); }
        //构造器
        public Leaf(){ System.out.println("Leaf 构造器"); }    
    }

    ************

    常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。

    昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。
  • 相关阅读:
    内核随记(三)同步(1)
    排列算法
    SQLite入门与分析(八)存储模型(3)
    内核随记(一)——理解中断(2)
    dup与dup2系统调用
    内核随记(四)文件系统(1)
    SQLite入门与分析(八)存储模型(2)
    SQLite入门与分析(九)VACUUM命令分析
    c中static变量局部变量
    (i++)+(i++)与(++i)+(++i)
  • 原文地址:https://www.cnblogs.com/htj10/p/13269313.html
Copyright © 2011-2022 走看看