博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java父类与子类中静态代码块 实例代码块 静态变量 实例变量 构造函数执行顺序...
阅读量:4993 次
发布时间:2019-06-12

本文共 2558 字,大约阅读时间需要 8 分钟。

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

代码执行的优先级为:

firest:静态部分

second:实例化过程

详细顺序为:

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

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

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

4.父类构造函数

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

6.子类构造函数

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

测试代码:

 

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

调用代码:

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

执行结果:

[plain]
    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 ------ 子类构造函数 

转载于:https://www.cnblogs.com/ldq2016/p/6626700.html

你可能感兴趣的文章
VS调试方法
查看>>
jquery拖拽实现UI设计组件
查看>>
javamail模拟邮箱功能获取邮件内容-中级实战篇【内容|附件下载方法】(javamail API电子邮件实例)...
查看>>
白话排序算法--冒泡排序
查看>>
imx6 18bit display
查看>>
Spring静态属性注入
查看>>
实验10:指针2
查看>>
【转】hibernate缓存:一级缓存和二级缓存
查看>>
第二个spring冲刺第3天
查看>>
AwSnap:让全版本(Windows、iOS、Android)Chrome浏览器崩溃的有趣漏洞
查看>>
线段树合并学习笔记
查看>>
AndroidAutoLayout
查看>>
样本不均衡下的分类损失函数
查看>>
node启动服务后,窗口不能关闭。pm2了解一下
查看>>
vsCode 改变主题
查看>>
【vijos】【树形dp】佳佳的魔法药水
查看>>
聚合新闻头条
查看>>
Ubuntu 关闭锁屏界面的 on-screen keyboard
查看>>
凸优化学习笔记
查看>>
使用ehcache-spring-annotations开启ehcache的注解功能
查看>>