zoukankan      html  css  js  c++  java
  • new 对象时的暗执行顺序

    为什么称为暗执行顺序,因为当我们在new 对象时,其不是简简单单的new一个完事,它要首先检查父类的,静态的,非静态的等代码,就好像我们结婚生孩子一样,要先到祖宗那里,公安局那里,左邻右舍那里,告诉他们,我们要结婚了.下面来看其本质:

    这里有一个父类一个子类:

    class Father{
    {
    System.out.println("父类非静态代码块");
    }
    static{
    System.out.println("父类静态代码块");
    }
    public Father(){
    System.out.println("父类构造器");
    }
    public static void method(){
    System.out.println("父类静态方法");
    }
    public void method2(){
    System.out.println("父类非静态方法");
    }
    }

    class Son extends Father{
    {
    System.out.println("子类非静态代码块");
    }
    static{
    System.out.println("子类静态代码块");
    }
    public Son(){
    System.out.println("子类构造器");
    }
    public static void method(){
    System.out.println("子类静态方法");
    }
    public void method2(){
    System.out.println("子类非静态方法");
    }
    }

    当new Son()时,会打印:

      父类静态代码块
      子类静态代码块
      父类非静态代码块
      父类构造器
      子类非静态代码块
      子类构造器

    可能你会总结出这样的规律:先父后子,先静态后非静态最后才是构造器,但这是不准确的,因为按这个原则还有一种执行顺序:

      父类静态代码块
      父类非静态代码块
      父类构造器

      子类静态代码块
      子类非静态代码块
      子类构造器

    所以观察了细微问题后,对规律再做总结,就像我们写论文一样,用目录层级完美诠释它们的执行顺序:

    1.静态代码块:

      1.1 父的

      1.2 子的

    2.父其他

      2.1 父非静态代码块

      2.2 父构造器

    3.子其他

      3.1 子非静态代码块

      3.2 子构造器

    即:总体原则是静态代码块--->父其他--->子其他.

    你记住了吗?



  • 相关阅读:
    【代码审计】XDCMS 报错注入
    【渗透测试】MS17-010 "永恒之蓝" 修复方案
    【代码审计】MenInfo文件包含漏洞
    【代码总结】数据库抽象层PDO
    【代码总结】PHP面向对象之接口与多态性应用
    【代码总结】PHP面向对象之抽象类
    东哥手把手带你刷二叉树(第一期)
    二叉树的序列化,就那几个框架,枯燥至极
    二叉堆详解实现优先级队列
    递归反转链表的一部分
  • 原文地址:https://www.cnblogs.com/wangxuejian/p/10425704.html
Copyright © 2011-2022 走看看