• AJPFX关于面向对象中的对象初始化整理,综合子父类、代码块等等


    今天总结了一下子父类当中含有静态代码块、代码块、构造函数、成员变量、子类复写父类方法时子类的初始化过程,把思路理清一下

    1. class Fu
    2. {
    3.         //父类成员变量
    4.         private int num = 3;
    5.         
    6.         //静态代码块,随着类的加载而加载
    7.         static{
    8.                 System.out.println("父类静态代码块");
    9.         }
    10.         
    11.         //代码块,运行于构造函数之前,成员变量显示初始化之后
    12.         {
    13.                 System.out.println("父类代码块,num = "+num);
    14.         }
    15.         
    16.         //构造函数,先去找他爸爸,运行完父类再运行子类
    17.         Fu(){
    18.                 super();//此处去找Object,可忽略
    19.                 System.out.println("父类构造函数,num = "+num);
    20.                 
    21.                 //此处调用的是子类的show方法,因为被覆盖了,注意子类覆盖父类方法时,返回值也得一样
    22.                 show();
    23.         }
    24.         
    25.         public void show()
    26.         {
    27.                 System.out.println("父类show方法,num = "+num);
    28.         }
    29. }
    30. class Demo extends Fu
    31. {
    32.         private int age =23;
    33.         
    34.         //静态代码块,他有直接父类时,先去加载直接父类
    35.         static{
    36.                 System.out.println("子类静态代码块");
    37.         }
    38.         
    39.         //构造代码块,当有直接父类时,当父类运行完毕才轮到构造代码块
    40.         {
    41.                 System.out.println("子类代码块,age = "+age);
    42.         }
    43.         
    44.         Demo()
    45.         {
    46.                 System.out.println("子类构造函数,age = "+age);
    47.                 show();
    48.                 
    49.         }
    50.         public void show()
    51.         {
    52.                 System.out.println("子类show方法,age = "+age);
    53.                 
    54.         }
    55.         
    56.         
    57.         public static void main(String[] args)throws IOException
    58.         {
    59.                 new Demo();
    60.         }
    61.         
    62.         
    63.         /*
    64.          *         父类静态代码块
    65.                 子类静态代码块
    66.                 父类代码块,num = 3
    67.                 父类构造函数,num = 3
    68.                 子类show方法,age = 0
    69.                 子类代码块,age = 23
    70.                 子类构造函数,age = 23
    71.                 子类show方法,age = 23
    72.          * */
    73. }

    总结一下:
    1.父类字节码先被JVM加载,父类静态代码块先运行。
    2.子类字节码被加载,子类静态代码块运行。
    3.子类构造函数进栈,子类的成员变量默认初始化
    4.super启动,父类构造函数进栈,父类成员变量默认初始化(super-->Object,可忽略)
    5.父类成员变量显示初始化
    6.父类构造代码块加载
    7.父类构造函数运行。
    8.子类成员变量显示初始化
    9.子类构造代码块运行。
    10.子类构造函数运行

  • 相关阅读:
    Ecommerce 3.0雏形出现
    网上购物折扣如此红火
    [ZZ]将测试人员整合到敏捷团队中
    晒工资网——Glassdoor
    [ZZ].NET自动探索式测试工具——Pex
    [ZZ]好的测试应该具备哪些特质?
    我用到的Firefox插件
    [ZZ]WatiN & Selenium RC-自动化测试工具比较
    [ZZ]高盛:Amazon预计10年营收涨10倍达台币3兆元
    从优惠券到维络卡
  • 原文地址:https://www.cnblogs.com/AJPFX/p/10861653.html
Copyright © 2020-2023  润新知