zoukankan      html  css  js  c++  java
  • 关于静态代码块和非静态代码块执行顺序(了解这些你就了解所有)

    public class Father {
    public static final Father ff = new Father();
    static{
    System.out.println("父类静态代码执行了");
    }
    {
    System.out.println("父类非静态代码执行了");
    }
    Father(){
    System.out.println("父类构造方法");
    }

    }

    public class Son extends Father {
    static{
    System.out.println("子类静态代码执行了");
    }
    {
    System.out.println("子类非静态代码执行了");
    }
    Son(){
    System.out.println("子类构造方法执行了");
    }
    public static void main(String[] args) {
    System.out.println("子类main方法执行了");
    new Son();
    }

    }

    分析思路(核心静态代码块是随着类的加载而加载,而且只执行一次,非静态代码块优先于构造代码块,执行是随着对象的创建而执行的)

    son这个类继承了father类,在加载son这个类的时候会先加载father这个类,执行的顺序是从上到下,所有先执行father类中创建对象,创建对象会先执行father类非静态代码块,然后在执行father构造方法,之后执行father类静态代码块(随着类的加载而加载,而且只加载一次),

    然后回到son类,先执行son类的静态代码,在执行main方法的输出,之后new了一个son对象,因为有继承关系,所以先执行father类非静态方法,在执行father类构造方法,然后执行son类非静态方法,在执行son类构造方法

    最终执行顺序如下:

    父类非静态代码执行了
    父类构造方法
    父类静态代码执行了
    子类静态代码执行了
    子类main方法执行了
    父类非静态代码执行了
    父类构造方法
    子类非静态代码执行了
    子类构造方法执行了

  • 相关阅读:
    Protobuf, understand the hood
    Linux下Matlab崩溃的解决方法
    高德地图AMapUI is not defined
    微信小程序
    js字符数组转化为数字数组
    高德地图网页端js API
    es6 函数的扩展(尾递归看不太懂,不浪费时间了)
    es6 数值扩展(正则稍微看了下,以后用得着再细看)
    vue清空表单
    es6 变量的解析复制
  • 原文地址:https://www.cnblogs.com/BaiChunLong/p/11331714.html
Copyright © 2011-2022 走看看