A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马