您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> 正文    
  构造方法的初始化顺序 【注册男护士专用博客】          

构造方法的初始化顺序

www.nanhushi.com     佚名   不详 

  想像一下你正在用java写程序,并且用下面的代码初始化类 A 和 B 的对象:

  class A {

  int a = f();

  int f() {

  return 1;

  }

  }

  class B extends A {

  int b = a;

  int f() {

  return 2;

  }

  }

  public class CtorDemo1 {

  public static void main(String args[]) {

  B bobj = new B();

  System.out.println(bobj.b);

  }

  }

  现在,好像很明显的当初始化完成后,bobj.b的值将是1。毕竟,类B中的b 的值是用类A中的a的值初始化的,而a 是用f 的值初始化的,而它的值为1,对吗?

  实际上, bobj.b 的值是2,要知道为什么需要知道对象初始化的问题。

  当一个对象被创建时,初始化是以下面的顺序完成的:

  1. 设置成员的值为缺省的初始值 (0, false, null)

  2. 调用对象的构造方法 (但是还没有执行构造方法体)

  3. 调用父类的构造方法

  4. 使用初始化程序和初始块初始化成员

  5. 执行构造方法体

  看看在实际中是如何一步一步完成的,看看下面的例子:

  class A {

  A() {

  System.out.println("A.A called");

  }

  }

  class B extends A {

  int i = f();

  int j;

  {

  j = 37;

  System.out.println("initialization block executed");

  }

  B() {

  System.out.println("B.B called");

  }

  int f() {

  System.out.println("B.f called");

  return 47;

  }

  }

  public class CtorDemo2 {

  public static void main(String args[]) {

  B bobj = new B();

  }

  }

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    2011年护士资格考试:考…
    2009年初级护士资格考试…
    2009年主管护师考试于12…
    2009年初级护士考试于12…
    2009年初级护师考试于12…
    石家庄市关于2009年度护…
    2009年护士专业技术资格…
    医护技能考试周末举行 4…
    护士“托福”今年7月开考
    护士“托福”考试开始报…
    专 题 栏 目