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.子类构造函数运行

猜你喜欢

转载自www.cnblogs.com/AJPFX/p/10861653.html