zoukankan      html  css  js  c++  java
  • Java父类与子类中静态代码块 实例代码块 静态变量 实例变量 构造函数执行顺序

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


    代码执行的优先级为:

    firest:静态部分

    second:实例化过程


    详细顺序为:

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

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

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

    4.父类构造函数

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

    6.子类构造函数


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


    测试代码:

    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. }  

    调用代码:

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


    执行结果:

      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 ------ 子类构造函数 
  • 相关阅读:
    CF1137FMatches Are Not a Child‘s Play【LCT】
    P4491[HAOI2018]染色【多项式,二项式反演】
    P3170[CQOI2015]标识设计【插头dp】
    log4j 使用教程说明
    log4j中Logger.getLogger()加载一个类提示错误
    编程基础 0x00008 的0x代表什么?
    编程基础 快速的进行 2进制,10进制,16进制 的 相互转换
    Java 基础 equals,hashcode和==的区别
    位运算 左移右移运算符 >>, <<, >>>
    Java 虚拟机 2.2 运行时数据区 Runtime Data Area
  • 原文地址:https://www.cnblogs.com/ldq2016/p/6626700.html
Copyright © 2011-2022 走看看