zoukankan      html  css  js  c++  java
  • 静态代码块、非静态代码块、构造函数之间的执行顺序

    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();
        }
    }

    结果为:

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

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

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

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

  • 相关阅读:
    LDAP
    开源实时日志分析ELK平台部署
    js上传并且预览图片
    python logging的应用
    使用QQ第三方登录 并在父页面跳转刷新
    ubuntu sudo不能用的解决办法
    ubuntu 16.10安装nginx
    crontab 切割日志
    nginx的日志切割
    python对excel文件的读写操作
  • 原文地址:https://www.cnblogs.com/lq625424841/p/7090483.html
Copyright © 2011-2022 走看看