为什么称为暗执行顺序,因为当我们在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 子构造器

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

你记住了吗?


转载于:https://www.cnblogs.com/wangxuejian/p/10425704.html

new 对象时的暗执行顺序相关推荐

  1. C++析构函数执行顺序

    今天发现主程序中有多个对象时析构函数的执行顺序不是对象定义的顺序,而是对象定义顺序反过来. 思考了一下,结合之前继承.成员对象等的析构函数执行的顺序,我觉得析构函数执行的顺序为:构造函数的顺序反过来, ...

  2. 【Linux 内核 内存管理】RCU 机制 ④ ( RCU 模式下更新链表项 list_replace_rcu 函数 | 链表操作时使用 smp_wmb() 函数保证代码执行顺序 )

    文章目录 一.RCU 模式下更新链表项 list_replace_rcu 函数 二.链表操作时使用 smp_wmb() 函数保证代码执行顺序 一.RCU 模式下更新链表项 list_replace_r ...

  3. Unity基础开发之事件函数的执行顺序

    Unity基础开发之事件函数的执行顺序 文章目录 前言 一.Initializtion阶段 Awake() OnEnable() 二.Editor阶段 Reset() OnValidate() 三.第 ...

  4. 多重继承的构造函数和析构函数的执行顺序(包含虚基类)

    下面示例就是说明多重继承析构函数和构造函数的执行顺序: #include <iostream> using namespace std;class A {public:A(int i){c ...

  5. cucumber 文件目录结构和执行顺序

    引用链接:http://www.cnblogs.com/timsheng/archive/2012/12/10/2812164.html Cucumber是Ruby世界的BDD框架,开发人员主要与两类 ...

  6. atexit函数的执行顺序_多玩YY语音的面试题:C++中如何在main()函数之前执行操作?...

    多玩YY语音的面试题:C++中如何在main()函数之前执行操作? 第一反应main()函数是所有函数执行的开始.但是问题是main()函数执行之前如何执行呢? 联想到MFC里面的 C**App类的t ...

  7. filter过滤器和interceptor拦截器的区别和执行顺序

    1.过滤器 过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上.它是随你的web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当你的web应用停止或重新部署的时候 ...

  8. gtw-050090|执行拦截器时发生异常_执行流程 | 你真的了解Spring AOP的执行顺序吗?...

    Hi! 我是小小,我们又见面了,今天的主要内容是,你真的了解Spring AOP的执行顺序吗?跟随着我的脚步,一块丈量世界,了解世界,重新认识,重新了解Spring AOP的执行顺序. 聊一聊毕业四个 ...

  9. Java构建子类对象时的顺序

    先看一个这么的程序: //------------------------------------------------------------------------// //程序目的,创建一个父 ...

最新文章

  1. linux下的软件使用——抛弃Windows的历程
  2. 通俗易懂讲解RBF网络
  3. cannot bind to cxOutlet since it is not a known property of ng template
  4. 一机双平面、TCP半连接攻击——SYN攻击详解
  5. ibator使用心得
  6. 也谈创业企业CEO该拿多少工资
  7. [数据结构] 左偏树
  8. soapui连接oracle,myeclipse 安装soapui插件
  9. 【AT91SAM9261EK】u-boot 2022 tftpboot 烧写根文件系统
  10. Threejs导入OBJ模型出错的一些经验之谈
  11. 【个人管理】Nicholas C. Zakas:我得到的最佳职业生涯建议
  12. 【浅墨Unity3D Shader编程】之一 夏威夷篇:游戏场景的创建 第一个Shader的书写
  13. 神经网络预测参数有哪些,神经网络预测参数包括
  14. linux命令画圣诞树图片,在Linux终端下显示动画的圣诞树
  15. PPTPDF文件转换成图片上传OSS
  16. Java 查找数组中某个数字的下标
  17. 浅析网络编程之AF_INET和PF_INET
  18. 【论文详解】—AlphaGo中用到的3个关键技术
  19. web ui自动化之模拟上传文件操作
  20. 安卓系统再曝高危漏洞!大部分手机都可能被黑客控制

热门文章

  1. python交通调查数据处理_python 小型交通调查后的数据处理(数车)
  2. 什么是交互设计?交互设计是用来干什么的?
  3. 【牛客网】NC31 第一个只出现一次的字符
  4. 图解HTTP知识框架
  5. 水泵怎么做_燃气壁挂炉初次调试,要怎么做才好?
  6. react 开源项目_2020年2月Github上最热门的JavaScript开源项目
  7. python显示时间且更新_python显示当前时间
  8. 10进制小数转化为任意进制小数
  9. STM8单片机 PWM无波形输出解决方法
  10. ubuntu环境搭建五:修改中文字符集