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方法执行了
    父类非静态代码执行了
    父类构造方法
    子类非静态代码执行了
    子类构造方法执行了

  • 相关阅读:
    php中的闭包和匿名函数
    php魔术常量
    SQL查询:存在一个表而不在另一个表中的数据
    php发送http请求的几种方式
    php高级工程师面试题
    php中include、require、include_once、require_once的区别
    gitignore规则基础
    Google地图数据算法
    【营销】包子和星座
    【GPS】 数据围栏
  • 原文地址:https://www.cnblogs.com/BaiChunLong/p/11331714.html
Copyright © 2011-2022 走看看