理解JAVA对象的初始化

考虑下面的简单代码,A中包含B,C,而B中又包含C:

class A
{
 private B b;
 private C c =new C("default value");
 public A()
 {
  b = new B(c);
 }
 //some geter/setter method...
 }

class B
{
 private C c;
 public B(C c)
 {
  this.c = c;
 }
 //some geter/setter method...
}

class C
{
 private String str ;
 public C(String str)
 {
  this.str = str;
 }
 //some geter/setter method...
}

下面有一个D,继承A:

class D extends A
{
 public D(String str)
 {
  super(); //有没有这句结果都一样,因为在子类的构造函数中会自动调用父类的构造函数,所以不必显式调用。
  this.setC(new C(str));
  //this.setB(new B(new C(str)));
 }
}

另外有一个单独的测试类TestInit:

public class TestInit
{
 public static void main(String[] args)
 {
  D d = new D("new value");
  System.out.println(d.getC().getStr());
  System.out.println(d.getB().getC().getStr());
 }
}

输出结果为:
new value
default value

如果我们把D改成这样:
class D extends A
{
 public D(String str)
 {
  super();
  //this.setC(new C(str));
  this.setB(new B(new C(str)));
 }
}

则输出结果为:
default value
new value

这就证实了java中类的初始化过程是这样的:

先父类再子类,先成员变量再构造函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值