黑马程序员技术交流社区

标题: 构造方法,构造代码块,子类的初始化过程。之前遇到的..... [打印本页]

作者: 黑马-郑玉元    时间: 2013-3-15 19:33
标题: 构造方法,构造代码块,子类的初始化过程。之前遇到的.....
本帖最后由 黑马-郑玉元 于 2013-3-16 07:16 编辑
  1. class Demo01{
  2.         
  3.         
  4.         public static void main(String[] args){
  5.                 new Zi();
  6.         }

  7. }
  8. class Fu{
  9.         {
  10.         System.out.println("父类构造代码块");
  11.         }
  12.         Fu(){
  13.                
  14.                 show();//父类的构造方法
  15.         }
  16.         
  17.         void show(){
  18.         System.out.println("父类的方法");
  19.         }
  20. }

  21. class Zi extends Fu{

  22.         int num = 8;
  23.         /*
  24.         static{
  25.                 System.out.println("静态代码块 = "+num);
  26.         }
  27.         */
  28.         
  29.         {
  30.                 System.out.println("构造代码块 = " + num);//构造代码块
  31.         }
  32.         
  33.         Zi(){
  34.                 super();
  35.                 System.out.println("子类的构造方法= " + num);//子类的构造方法
  36.         }
  37.         
  38.         void show(){
  39.                 System.out.println("子类方法= " + num);
  40.         }
  41.         
  42. }
  43. 执行之后的结果!!详细过程,以及理由用到的知识!!!


复制代码

作者: wanggang    时间: 2013-3-15 20:12
首先解释的是{..... }和构造是一个性质的作用,而且构造的特点就是按照位置先后执行,毋庸置疑首先输出了:
父类构造代码块
然后是调用子类的show()方法,因为你生成什么对象就调用什么方法 子类的对象就调用子类的  父类的对象就调用父类的,所以输出:
子类方法=0
构造代码块=8     这个不解释,同上
最后是子类的构造方法Zi()

子类的构造方法=8
作者: 黑马-郑玉元    时间: 2013-3-15 20:31
wanggang 发表于 2013-3-15 20:12
首先解释的是{..... }和构造是一个性质的作用,而且构造的特点就是按照位置先后执行,毋庸置疑首先输出了: ...

明白了点!!!
作者: wanggang    时间: 2013-3-15 20:36
明白了,就给分吧{:soso_e120:}
作者: 黑马-郑玉元    时间: 2013-3-15 20:37
wanggang 发表于 2013-3-15 20:36
明白了,就给分吧

我可以给你分么??版主给吧!!!
作者: 刘海浩    时间: 2013-3-15 20:38
这个是之前回答的一个问题,和你的问题有点相似,你可以参考下http://bbs.itheima.com/forum.php?mod=viewthread&tid=40856
作者: 刘海浩    时间: 2013-3-15 20:38
这个是之前回答的一个问题,和你的问题有点相似,你可以参考下http://bbs.itheima.com/forum.php?mod=viewthread&tid=40856
作者: wanggang    时间: 2013-3-15 20:39
{:soso_e127:}白高兴了,加油!
作者: 黑马-郑玉元    时间: 2013-3-15 20:39
刘海浩 发表于 2013-3-15 20:38
这个是之前回答的一个问题,和你的问题有点相似,你可以参考下http://bbs.itheima.com/forum.php?mod=viewt ...

好的!!谢谢!!
作者: 祁振朋    时间: 2013-3-15 20:52
类初始化时构造函数调用顺序:
1 首先加载类,遇到extends字样会停止加载当前类,加载父类,之后再继续加载。
2 当把一个类完全加载后,这个类的静态成员将被先加载。之后进行如下流程:
(1)初始化对象的存储空间为零或null值;
(2)调用父类构造函数;
(3)按顺序分别调用类成员变量和实例成员变量的初始化表达式;
(4)调用本身构造函数

楼主的代码,重点在父类加载,加载父类构造函数的时候,调用的了show方法,注意这个时候调用的show方法,是子类重写过的。所以输出是“子类方法=0”
作者: 黑马-郑玉元    时间: 2013-3-15 20:58
祁振朋 发表于 2013-3-15 20:52
类初始化时构造函数调用顺序:
1 首先加载类,遇到extends字样会停止加载当前类,加载父类,之后再继续加 ...

很好!谢谢!!!
作者: 陈丽莉    时间: 2013-3-16 01:07
若还有问题,继续追问;没有的话,请将帖子分类改成【已解决】~




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