黑马程序员技术交流社区

标题: 继承与各种代码块执行顺序总结,欢迎大家指正 [打印本页]

作者: heima_jinchen    时间: 2015-9-15 21:40
标题: 继承与各种代码块执行顺序总结,欢迎大家指正
情况一:当一个类继承于另一个类时。   规则:成员变量,构造代码块,构造方法。这三者中,无论顺序怎样,构造方法都是最后执行的。而成员变量,构造代码块是顺序执行,谁在前谁先执行。
      1、先加载父类(有静态代码块就执行),后加载子类(有静态代码块就执行)。--->(先执行静态代码块)
      2、接着执行main方法中的代码(假设是创建该子类对象),创建该子类对象时,会先执行父类中空参构造方法,(根据以上规则,如果有成员变量 和构造代码块就先于构造方法执行),再执行子类构造方法。(根据以上规则,如果有成员变量和构造代码块就先于构造方法执行)。
情况二:当一个类没有继承于另一个类时。       1、直接先加载子类(有静态代码块就执行)。--->(先执行静态代码块)
      2、接着执行main方法中的代码(假设是创建该类对象),创建该类对象时,会执行该类对应的构造方法。(根据以上规则,如果有成员变量和构造代码块就先于构造方法执行)。




每进入到一个类中时就按情况一或者情况二分析。欢迎大家批评指正!

以下数字(1,2,3.........)代表输出顺序。
class W {
        {System.out.println("W构造代码块----10"); }
        static{System.out.println("W静态代码块----9");}
        W() {
                System.out.println("W构造方法---11");   
        }
}
class Y {
        {System.out.println("Y构造代码块----5"); }
        static{System.out.println("Y静态代码块------4");}
        Y() {
                System.out.println("Y构造方法....6");  
        }
}
class X {
        {System.out.println("X构造代码块---------3"); }
        static{System.out.println("X静态代码块------1");}
        Y b = new Y();
        X() {
                System.out.println("X构造方法....-----7");  
        }
}
public class Z extends X {
        {System.out.println("Z构造代码块---8"); }
       
        W w = new W();
        Z() {
                super();
                System.out.println("Z构造方法....12");   
        }
        static{System.out.println("Z静态代码块-------2");}
        public static void main(String[] args) {
                //{System.out.println("Z局部代码块"); }
                new Z();
        }
}


作者: Rzzz    时间: 2015-9-15 21:43
先 mark  在看~666
作者: silencea    时间: 2015-9-15 21:44
今天的学的我好乱!
作者: 青春触及的阳光    时间: 2015-9-15 21:45
总结的不错,再复习会
作者: heima_jinchen    时间: 2015-9-15 21:45
Rzzz 发表于 2015-9-15 21:43
先 mark  在看~666

666666,一起努力!!!
作者: 如期而至    时间: 2015-9-15 21:45
@同桌 超赞!晚上好好研究的看看。。。
作者: gss    时间: 2015-9-15 21:46
学以致用。。
作者: 淡忘、悲年华    时间: 2015-9-15 21:46
棒棒哒,加油,同桌!
作者: heima_jinchen    时间: 2015-9-15 21:46
silencea 发表于 2015-9-15 21:44
今天的学的我好乱!

木事,慢慢来,加油加油!
作者: 然后呢8908    时间: 2015-9-15 21:47
嗯,总结得不错。
作者: heima_jinchen    时间: 2015-9-15 21:48
gss 发表于 2015-9-15 21:46
学以致用。。

加油!!!!!!!!!!!!!!!
作者: heima_jinchen    时间: 2015-9-15 21:49
如期而至 发表于 2015-9-15 21:45
@同桌 超赞!晚上好好研究的看看。。。

嗯嗯,好哒,加油!!!
作者: heima_jinchen    时间: 2015-9-15 21:50
淡忘、悲年华 发表于 2015-9-15 21:46
棒棒哒,加油,同桌!

加油加油,勇往直前!!!!
作者: heima_jinchen    时间: 2015-9-15 21:51
青春触及的阳光 发表于 2015-9-15 21:45
总结的不错,再复习会

嗯嗯,加油!!!!!!!
作者: yi秒的危笑    时间: 2015-9-15 21:53
不错,总结很好!
作者: BlueWing    时间: 2015-9-15 22:01
今天刚好又把这个复习了一遍,你总结的真到位,代码写的也很有逻辑,受教了。
情况二里面,如果没有继承,就不会有子类,楼主是不是笔误了。
作者: 小二阳    时间: 2015-9-15 22:11
zan 一个,可以的.666
作者: 0902赵建新    时间: 2015-9-15 22:21
瞬间好像清晰了好多,赞了。
作者: 笑笑精灵    时间: 2015-9-15 22:21
总结的不错,加油!
作者: 残影    时间: 2015-9-15 22:34
/////
作者: heima_jinchen    时间: 2015-9-15 22:52
BlueWing 发表于 2015-9-15 22:01
今天刚好又把这个复习了一遍,你总结的真到位,代码写的也很有逻辑,受教了。
情况二里面,如果没有继承, ...

对啊,惭愧,复制的上面的,没改好.............................不好意思哈
作者: heima_jinchen    时间: 2015-9-15 22:55
笑笑精灵 发表于 2015-9-15 22:21
总结的不错,加油!

{:2_31:}加油!!!!!!
作者: ZZBY    时间: 2015-9-16 01:24
总结的很好,学习了,我弄了下格式,方便别人看清楚
  1. class W {
  2.         {System.out.println("W构造代码块----10"); }
  3.         static{System.out.println("W静态代码块----9");}
  4.         W() {
  5.                 System.out.println("W构造方法---11");   
  6.         }
  7. }
  8. class Y {
  9.         {System.out.println("Y构造代码块----5"); }
  10.         static{System.out.println("Y静态代码块------4");}
  11.         Y() {
  12.                 System.out.println("Y构造方法....6");  
  13.         }
  14. }
  15. class X {
  16.         {System.out.println("X构造代码块---------3"); }
  17.         static{System.out.println("X静态代码块------1");}
  18.         Y b = new Y();
  19.         X() {
  20.                 System.out.println("X构造方法....-----7");  
  21.         }
  22. }
  23. public class Z extends X {
  24.         {System.out.println("Z构造代码块---8"); }
  25.         
  26.         W w = new W();
  27.         Z() {
  28.                 super();
  29.                 System.out.println("Z构造方法....12");   
  30.         }
  31.         static{System.out.println("Z静态代码块-------2");}
  32.         public static void main(String[] args) {
  33.                 //{System.out.println("Z局部代码块"); }
  34.                 new Z();
  35.         }
  36. }
复制代码

作者: ZZBY    时间: 2015-9-16 01:26
ZZBY 发表于 2015-9-16 01:24
总结的很好,学习了,我弄了下格式,方便别人看清楚

我发现它会把{}单独占一行的,全给合并了
作者: 且听风_R0pZK    时间: 2015-9-16 07:16
非常感谢分享总结哈!
作者: liuyafei    时间: 2015-9-16 21:21
母牛追着公牛转——牛逼极了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2