• 静态代码块、非静态代码块、构造函数之间的执行顺序


    1.执行顺序

    静态代码块>非静态代码块>构造函数

    public class staticCode {
        public staticCode() {
            System.err.println("构造函数");
        }
        {
            System.err.println("非静态代码块");
        }
        static{
            System.err.println("静态代码块");
        }
        public static void main(String[] args) {
            new staticCode();
        }
    
    }

    无论如何调换顺序输出的结果都是:

    静态代码块
    非静态代码块
    构造函数

    可见:静态代码块属于类,在类加载的时候就执行了,只执行一次。然后就是非静态代码块和构造函数,非静态代码块是比构造函数执行早的。

    public static void main(String[] args) {
            new staticCode();
            new staticCode();
        }

    如果在main方法里面创建对象两次结果为:

    静态代码块
    非静态代码块
    构造函数
    非静态代码块
    构造函数

    2.讨论有继承的情况

    class staticCode {
        public staticCode() {
            System.err.println("父构造函数");
        }
        {
            System.err.println("父非静态代码块");
        }
        static{
            System.err.println("父静态代码块");
        }
        
    
    }
     public class staticCode_1 extends staticCode{
        public staticCode_1() {
            System.err.println("子构造函数");
        }
        {
            System.err.println("子非静态代码块");
        }
        static{
            System.err.println("子静态代码块");
        }
        public static void main(String[] args) {
            new staticCode_1();
        }
    }

    结果为:

    父静态代码块
    子静态代码块
    父非静态代码块
    父构造函数
    子非静态代码块
    子构造函数

    结论:静态代码块属于类,在子类加载的先加载父类,所以父静态代码块最优先,其次就是子静态代码块,它们都只执行一次。

            然后就开始构造父类,但是要先执行非静态代码块。

            最后才构造子类,同样先执行非静态代码块。

  • 相关阅读:
    HTML CSS3 手风琴菜单
    python代码- post请求图片上传
    python 一行代码生成 二维码
    Jenkins 中定时任务构建
    Jenkins 常用插件
    window系统,GitLab 远程与本地 SSH 认证连接
    Jmeter+Maven+Jenkins+Git接口自动化流程
    jmeter 响应中有中文乱码问题,解决
    Excel文件导入功能 用例设计思路
    Jmeter01 -mac下的安装
  • 原文地址:https://www.cnblogs.com/lq625424841/p/7090483.html
Copyright © 2020-2023  润新知