实例化子类时,父类与子类中的静态代码块、实例代码块、静态变量、实例变量、构造函数的执行顺序是怎样的?

代码执行的优先级为:

firest:静态部分

second:实例化过程

详细顺序为:

1.父类静态代码块与父类静态变量(取决于代码书写顺序)

2.子类静态代码块与子类静态变量(取决于代码书写顺序)

3.父类实例变量与父类代码块(取决于代码书写顺序)

4.父类构造函数

5.子类实例变量与父类代码块(取决于代码书写顺序)

6.子类构造函数

在JVM加载完类以后,类在被使用的时候初始化,静态部分只在类初始化的时候执行一次。

测试代码:

[java] view plaincopy
  1. class Father {
  2. Father() {
  3. LogUtil.log(System.currentTimeMillis() + " ------ 父类构造函数");
  4. }
  5. static {
  6. LogUtil.log(System.currentTimeMillis() + " ------ 父类静态代码块");
  7. }
  8. long x = getTime(" ------ 父类实例变量");
  9. {
  10. long time = System.currentTimeMillis();
  11. LogUtil.log(time + " ------ 父类代码块");
  12. }
  13. static long y = getTime(" ------ 父类静态变量");
  14. static long getTime(String who) {
  15. long time = System.currentTimeMillis();
  16. LogUtil.log(time + who);
  17. return time;
  18. }
  19. }
  20. class Child extends Father {
  21. Child() {
  22. LogUtil.log(System.currentTimeMillis() + " ------ 子类构造函数");
  23. }
  24. static long y = getTime(" ------ 子类静态变量");
  25. static {
  26. LogUtil.log(System.currentTimeMillis() + " ------ 子类静态代码块");
  27. }
  28. {
  29. long time = System.currentTimeMillis();
  30. LogUtil.log(time + " ------ 子类代码块");
  31. }
  32. long x = getTime(" ------ 子类实例变量");
  33. static long getTime(String who) {
  34. long time = System.currentTimeMillis();
  35. LogUtil.log(time + who);
  36. return time;
  37. }
  38. }

调用代码:

[java] view plaincopy
  1. new Thread(new Runnable() {
  2. @Override
  3. public void run() {
  4. new Child();
  5. LogUtil.log("分隔符 ------ 分隔符");
  6. new Child();
  7. }
  8. }).start();

执行结果:

[plain] view plaincopy
  1. 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 父类静态代码块
  2. 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 父类静态变量
  3. 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 子类静态变量
  4. 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 子类静态代码块
  5. 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 父类实例变量
  6. 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 父类代码块
  7. 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 父类构造函数
  8. 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 子类代码块
  9. 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 子类实例变量
  10. 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 子类构造函数
  11. 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 分隔符 ------ 分隔符
  12. 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 父类实例变量
  13. 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 父类代码块
  14. 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523353 ------ 父类构造函数
  15. 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523354 ------ 子类代码块
  16. 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523354 ------ 子类实例变量
  17. 11-03 20:02:03.350 7533-7881/? E/AKADDEMO: 1478174523354 ------ 子类构造函数

Java父类与子类中静态代码块 实例代码块 静态变量 实例变量 构造函数执行顺序...相关推荐

  1. java静态代码块和非静态代码块和构造函数执行顺序

    一.同类中静态代码块,非静态代码块,构造方法的执行顺序 1. 执行顺序:静态代码块-->非静态代码块-->构造方法. 程序在执行时,首先执行静态代码块,且只执行一次.接下来再创建对象时(n ...

  2. 静态代码块、非静态代码块、构造函数执行顺序

    静态代码块.非静态代码块.构造函数执行顺序 /*** 类的实例化顺序,静态代码块.非静态代码块.构造函数.* @author MING*/ class Person {static String na ...

  3. java先执行static还是构造函数_【Java基础】类的实例化、static、父类构造函数执行顺序...

    重温java基础,以免自己以后犯原则性错误,这是最基本,最基础的东西. 先看结论: 一个类的实例化过程: 1,首先会执行类中static代码块(不管代码块是否在类的开头还是末尾处),如果这个类有父类, ...

  4. java 继承类 变量、静态变量、构造函数执行顺序

    java 继承类 变量.静态变量.构造函数执行顺序 Java代码   class C{ static int prt(int i){ System.out.println(i); return i; ...

  5. C#构造函数、私有构造函数、静态构造函数与构造函数执行顺序

    https://www.cnblogs.com/ArtofDesign/p/3603986.html 默认构造函数,如果没有为类指定任何构造函数,编译器会自动为类创建一个无参构造函数,用以初始化类的字 ...

  6. java静态/动态成员变量、初始化块,父类/子类构造函数执行顺序问题

    2019独角兽企业重金招聘Python工程师标准>>> /* * 几大原则 * 一.静态成员变量(Static) * 1.静态成员变量为类变量,所有对象共享同一内存空间 * 2.静态 ...

  7. java父类转子类_java中什么是继承,和继承的接口的关系?

    继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父 ...

  8. java父类与子类的构造方法_java中的加载顺序以及父类与子类的构造方法 | 学步园...

    public class fatt { public static void main(String[] args) { animal a=new cat(9); } } class animal{ ...

  9. java 父类访问子类_java中父类访问子类变量

    我们都知道,子类的方法可以访问父类的实例变量,这是因为子类继承父类就会获得父类的成员变量和方法:但是父类的方法水能访问子类的实例变量,因为父类根本无法知道它将被哪个子类继承,它的子类将会增加怎样的成员 ...

最新文章

  1. UI培训技术分享:设计大神都在用的10种技法!
  2. php将url出现 双斜杠,php-URL重写在末尾添加斜杠会破坏我的css链接
  3. 经过五年测试 维基利用HTML5迈入视频时代
  4. leetcode 136. Single Number
  5. java url下载ics_使用Microsoft Graph API处理外部(Internet / .ics)日历URL
  6. observable java_Observable基本用法(RxJava)
  7. SpringBoot项目集成Mybatis Plus(四)SQL映射文件
  8. java hashMap缓存简单实现
  9. python裂缝检测_通过opencv-python检测裂缝
  10. 腾讯云上海服务器稳定吗,腾讯云服务器上海机房速度怎么样 1M带宽是否够用
  11. linux启动分区丢,Linux装机因为分区丢失引导解决办法
  12. VMware安装虚拟机详细教程
  13. 00后测试员摸爬滚打近一年,为是否要转行或去学软件测试的学弟们总结出了以下走心建议
  14. 如何在matlab中表示e,Matlab中表达e的操作方法介绍
  15. C语言课设物资管理系统,C语言课设之物资管理系统.doc
  16. 关于发那科机器人程序偏移功能
  17. Nginx HLS压测工具之vegeta
  18. 蓝桥ROS机器人课程总结2022
  19. 八大排序算法 —— 归并排序
  20. 银行怎样处理坏账和贷款展期

热门文章

  1. JSON与XML优缺点对比分析
  2. 在线HTTP请求/响应头转JSON工具
  3. 设置X轴,y轴分格线,使用对象句柄完成
  4. 解决vue在ie9中的兼容问题
  5. 关于PostgreSQL空间膨胀的研究
  6. oracle instr函数详解
  7. 两家美国科技公司被骗走一亿美元
  8. java-web-j2e学习建议路线
  9. Python 中的注意点_s2
  10. PIMPL(private implementation或者pointer to implementation)