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

  1. class Fu {
  2.         static {
  3.                 System.out.println("静态代码块Fu");
  4.         }

  5.         {
  6.                 System.out.println("构造代码块Fu");
  7.         }

  8.         public Fu() {
  9.                 System.out.println("构造方法Fu");
  10.         }
  11. }
  12.        
  13. class Zi extends Fu {
  14.         static {
  15.                 System.out.println("静态代码块Zi");
  16.         }

  17.         {
  18.                 System.out.println("构造代码块Zi");
  19.         }

  20.         public Zi() {
  21.                 System.out.println("构造方法Zi");
  22.         }
  23. }


  24. class Demo {
  25.         public static void main(String[] args) {
  26.                 Zi z = new Zi();
  27.         }
  28. }
复制代码
打印结果为:



我感觉结果应该是:
静态代码块Fu
静态代码块Zi
构造代码块Zi
构造代码块Fu
构造方法Fu
构造方法Zi


静态代码块是随着类的加载而加载进来的,然后在调用Zi(){}之前,不应该是先调用的Zi类中的构造代码块{}吗?
这样的话,就是“构造代码块Zi”先打印出来。
然后执行Zi(){},里面默认第一行super();
找Fu类,在调用Fu(){}之前,同样先调用Fu类中的构造代码块,打印"构造代码块Fu"。
然后执行Fu(){},打印“构造方法Fu”。
最后就是打印“构造方法Zi”。
求解哪里出了问题?

1 个回复

倒序浏览
当你有继承关系的时候,他会去找他的父类,会先给父类初始化在轮到子类
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马