• 技术文章 >Java >Java基础

    静态代码块、构造代码块、构造方法的执行顺序是什么

    青灯夜游青灯夜游2022-01-25 11:41:17原创8072

    执行顺序是:先执行“静态代码块”,再执行“构造代码块”,最后执行“构造代码块”。静态代码块是类级别的,而构造代码块和构造方法是实例级别的,因而静态代码块先执行;又因构造代码块是独立的,必须依附载体才能运行,因而构造代码块需放到构造方法前。

    本教程操作环境:windows7系统、java8版、DELL G3电脑。

    构造代码块、静态代码块与构造方法是类中三种不同的代码块,那么他们到底有什么区别呢?

    一、三种代码块简介

    静态代码块:用staitc声明,jvm加载类时执行,仅执行一次

    构造代码块:类中直接用{}定义,每一次创建对象时执行。

    执行顺序优先级:静态块,main(),构造块,构造方法。

    class A
    {
        //构造代码块
        {
            System.out.println("构造代码块A");
        }
        //静态代码块
        static
        {
            System.out.println("静态代码块A");
        }
        //构造方法
        public A()
        {
            System.out.println("构造方法A");
        }
    }

    二、三者的执行顺序

    为了弄清楚三者的执行顺序,我们对类 A 进行实例化,分别进行单个实例和多个实例的测试。

    2.1 单个实例

    class Demo
    {
        public static void main(String[] args)
        {
            new A();
        }
    }

    2.2 多个实例

    class Demo
    {
        public static void main(String[] args)
        {
            new A();
            new A();
            new A();
        }
    }

    三、继承体系中的顺序

    class B extends A
    {
        //构造代码块
        {
            System.out.println("构造代码块B");
        }
        //静态代码块
        static
        {
            System.out.println("静态代码块B");
        }
        //构造方法
        public B()
        {
            System.out.println("构造方法B");
        }
    }
    
    class Demo
    {
        public static void main(String[] args)
        {
            new B();
        }
    }

    四、总结

    1、在创建一个对象的过程中,三者的执行顺序是:静态代码块 --> 构造代码块 --> 构造方法;

    1.静态代码块:是在类的加载过程的第三步初始化的时候进行的,主要目的是给类变量赋予初始值。
    2.构造代码块:是独立的,必须依附载体才能运行,Java会把构造代码块放到每种构造方法的前面,用于实例化一些共有的实例变量,减少代码量。
    3.构造方法:用于实例化变量。

    1是类级别的,2、3是实例级别的,自然1要优先23。

    在就明白一点:对子类得主动使用会导致对其父类得主动使用,所以尽管实例化的是子类,但也会导致父类的初始化和实例化,且优于子类执行。

    2、每创建一个对象,构造代码块和构造方法就会执行一次;而不管创建多少个对象,静态代码块仅仅只在创建第一个对象时执行一次;
    3、创建子类对象时,子类的静态代码块在父类的静态代码块后面执行,但优先于父类的构造代码块和构造方法;
    4、创建子类对象时,子类的构造代码块在父类的构造方法后执行。

    相关视频教程推荐:Java视频教程

    以上就是静态代码块、构造代码块、构造方法的执行顺序是什么的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:Java 注解——Java自己的配置文件 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • java的八大基本数据类型分别是什么?• java的三种工厂模式是什么?• 说说java的泛型机制是怎样的• java的三种代理模式分别是什么• java的运行机制是什么• .net是干嘛的和java的区别• java的三大体系分别是什么
    1/1

    PHP中文网