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 子构造器

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

    你记住了吗?



  • 相关阅读:
    idea快速生成javaBean快捷键
    2019.10.22 关于java对象的一些理解
    2019.10.21 解决win10电脑qq通话没有声音
    知乎上看到的好的文章
    2019.10.2怎么查看那些ip访问了你的网站
    2019.10.1怎么在服务器上建一个网站
    2019.9.30第一次把自己写的前端东西放在服务器上哈哈
    新手容易犯的错误
    Python3-列表推导式
    Python3-os模块
  • 原文地址:https://www.cnblogs.com/wangxuejian/p/10425704.html
Copyright © 2011-2022 走看看