Java基础之代码执行顺序深入解析


结合实例代码分析:

public class demo6 {public static void main(String[] args) {new Son();System.out.println("--------------");new Son();System.out.println("--------------");new Father();}
}
class Father{public Father(){System.out.println("111111");}{System.out.println("222222");}static {System.out.println("333333");}
}
class Son extends Father{public Son(){System.out.println("444444");}{System.out.println("555555");}static {System.out.println("666666");}
}

编译结果:

333333
666666
222222
111111
555555
444444
--------------
222222
111111
555555
444444
--------------
222222
111111

可以看出分两种情况:

  1. 若类还未被加载
  2. 类已加载

1. 若类还未被加载

  1. 先执行父类的静态代码块和静态变量初始化,并且静态代码块和静态变量的执行顺序只跟代码中出现的顺序有关。
  2. 执行子类的静态代码块和静态变量初始化。
  3. 执行父类的普通代码块
  4. 执行父类的构造函数
  5. 执行子类的普通代码块
  6. 执行子类的构造函数

即:

333333
666666
222222
111111
555555
444444

2. 类已加载

由于static静态代码块只会执行一次,所以第二次调用Son() 不会再执行。所以执行顺序为:

  1. 执行父类的普通代码块
  2. 执行父类的构造函数
  3. 执行子类的普通代码块
  4. 执行子类的构造函数

即:

222222
111111
555555
444444

Java基础之代码执行顺序深入解析相关推荐

  1. Java代码执行顺序

    Java代码执行顺序 1. Java初步认知 2. Javayun.java例子 3. 反编译Javayun.class文件 4. 分析Javayun_dxdump文件 5. 再来一个网上的例子Jav ...

  2. day9 java的实例语句块和代码执行顺序

    实例语句块 每执行一次构造就会在前执行一次实例语句块 代码执行顺序

  3. day9 java的静态代码块和代码执行顺序

    静态代码块 代码执行顺序 对于静态,不管是变量还是代码块.都是自上而下的.

  4. java课后习题七解析_《Java基础入门》_课后习题解析.doc

    <Java基础入门>_课后习题解析 <Java基础入门>课后习题 Java开发入门 一.填空题 1.Java的三大体系分别是_JavaSE_____._JavaEE_____. ...

  5. LeetCode1117. Building H2O --Java解法--多线程保证执行顺序--AtomicInteger

    此文首发于我的个人博客:LeetCode 1117. Building H2O --Java解法–多线程保证执行顺序–AtomicInteger - zhang0peter的个人博客 LeetCode ...

  6. java基础之代码碎片

    java基础之代码碎片 1 类定义 2 匿名对象 3 生成随机数 4 ArrayList集合 5 静态代码块 6 super和this关键字的三种用法 7 字节输出流和字节输入流 8 复制文件 9 键 ...

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

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

  8. python装饰器调用顺序_聊一聊Python装饰器的代码执行顺序

    为什么写这篇文章? 起因是QQ群里边有人提了一个问题:之前导入模块只需要1~2秒,为什么现在变成需要2~3分钟? 我的第一感觉是:是不是导入的模块顶层代码里边,做了什么耗时的事情.隔了一天,他的问题解 ...

  9. 日志打印、main函数中代码执行顺序

    文章目录 1.设置时区 2.日志打印 3.main函数中代码执行顺序 1.设置时区 我们要设置成 CST 时区,以保证正确地显示日期.时间. 我们常看到的时区有如下几个: PST:美国太平洋标准时间, ...

最新文章

  1. jenkins部署web项目
  2. 干货合集 | 带你深入浅出理解深度学习(附资源打包下载)
  3. Linux计划任务与压缩归档
  4. USB入门系列之二:USB的连接模型
  5. Go——cron定时任务Demo
  6. 整理的一些比较基础的面试知识点
  7. java8自定义收集器_使用自定义收集器进行Java 8分组?
  8. jSignature签名的用法,一文教会你(二)后台代码
  9. GCC编译静态库和动态库
  10. 【ROS学习笔记】(十一)launch启动文件的使用方法
  11. Mysql 删除数据表的三种方式详解
  12. 16.6 假新闻识别 Fake News Detection on Social Media A Data Mining Perspective
  13. 一个迷茫的 大学生自学Linux的开始
  14. 如何在自己的网站中嵌入其他网站的页面?
  15. 【牛客网-公司真题-前端入门篇】——百度2021校招Web前端研发工程师笔试卷(第一批)
  16. OIO和NIO的区别
  17. 人教版初中计算机学什么,人教版初中信息技术教案全集.pdf
  18. 基于Android的文本语音朗读器的设计与实现(有声小说APP)
  19. ipv4ipv6导致微信H5支付问题
  20. 43、在java中一个类被声明为final类型,表示了什么意思?

热门文章

  1. php验证码--图片
  2. RHEL 6.5 rpm包安装mplyer
  3. NSIS打包软件(一)
  4. tomcat与apache区别
  5. ASP.NET MVC区域
  6. CodeForces - 1400F x-prime Substrings(AC自动机+dp)
  7. 牛客 - 树上博弈(思维)
  8. POJ - 1328 Radar Installation(贪心+思维)
  9. POJ - 3926 Parade(单调队列优化dp)
  10. CodeForces - 566A Matching Names(字典树上贪心)