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

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

    你记住了吗?



  • 相关阅读:
    Oracle中的substr()函数详解案例
    servlet中通过getWriter()获取out返回给浏览器出现中文乱码问题
    linux系统644、755、777权限详解
    bootstrap select多选
    $(window).on("load",function(){} 和 $(document).ready(function() {}
    bootstrap 鼠标悬停显示
    redis 常用操作
    SpringMVC 集成redis
    linux安装redis-3.0.7
    mysql 外键的几种约束
  • 原文地址:https://www.cnblogs.com/wangxuejian/p/10425704.html
Copyright © 2011-2022 走看看