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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© didixyy 中级黑马   /  2015-10-6 16:07  /  533 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class top
  2. {
  3.         static {
  4.                 System.out.println("top的静态初始化块");
  5.         }
  6.         {
  7.                 System.out.println("top的普通初始化块");
  8.         }
  9.         public top()
  10.         {
  11.                 System.out.println("top的无参数初始化块");
  12.         }
  13. }
  14. class Mid extends top
  15. {
  16.         static {
  17.                 System.out.println("Mid的静态初始化块");
  18.         }
  19.         {
  20.                 System.out.println("Mid的普通初始化块");
  21.         }
  22.         public Mid()
  23.         {
  24.                 System.out.println("Mid的无参数构造器");
  25.         }
  26.         public Mid(String msg)
  27.         {
  28.                 this();
  29.                 System.out.println("Mid的带参数初构造器,参数:"+msg);
  30.         }
  31. }
  32. class low extends Mid
  33. {
  34.         static {
  35.                 System.out.println("low的静态初始化块");
  36.         }
  37.         {
  38.                 System.out.println("low的普通初始化块");
  39.         }
  40.         public low()
  41.         {
  42.                 super("我是参数");
  43.                 System.out.println("执行low的无参数构造器");
  44.         }
  45. }
  46. public class TestDaiMaKuai {
  47.         public static void main(String[] args) {
  48.                 new low();
  49.                 new low();
  50.         }
  51. }
复制代码

执行结果为

3 个回复

倒序浏览
图片挂了……建议保存到本地再上传。
回复 使用道具 举报
第一次创建low对象的时候,系统中部存在low类,所以需要先初始化并加载low类,初始化会从其类的顶层父类开始,先执行静态初始化块,按照顶层父类---父类---本类的顺序执行,但是一旦low类初始化后,该类会在虚拟机里一直存在,所以第2次执行  new low();的时候就没有再进行初始化了。
所以初始化块的顺序是,顶层父类静态初始化块>>>父类静态初始化块>>>本类静态初始化块>>>顶层父类普通初始化块>>>顶层父类构造器>>>父类普通初始化块>>>父类构造器>>>本类普通初始化块>>>本类构造器
回复 使用道具 举报
挂了的图重新上传一下

QQ截图20151006160024.png (152.66 KB, 下载次数: 4)

QQ截图20151006160024.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马