变量初始化

2017-03-30  本文已影响0人  HELLOWORLD_cb34

初始化过程

  1. 加载直至根基类

  2. 根基类static域初始化,static域中相对应的类被加载,先初始化static变量(使用时初始化一次

    1. 父类--静态变量
    2. 父类--静态初始化块
    3. 子类--静态变量
    4. 子类--静态初始化块
  3. 从父类开始,开始创建对象(堆上分配空间清零),对象中基本类型设为0,对象引用设为null。

  4. 执行所有出现于字段定义处的初始化动作。

  5. 调用基类构造器,构造器中调用子类的重写方法会深入到继承层次结构内部,但是由于域为0或者NULL可能得不到想要的结果(隐式static方法),实例变量依次初始化,执行构造器剩余部分。

    1. 静态初始化完毕后从基类逐步向下初始化
    2. 父类--变量
    3. 父类--初始化块
    4. 父类--构造器
    5. 子类--变量
    6. 子类--初始化块
    7. 子类--构造器
class Glyph {
  void draw() { print("Glyph.draw()"); }
  Glyph() {
    print("Glyph() before draw()");
    draw();
    print("Glyph() after draw()");
  }
}   

class RoundGlyph extends Glyph {
  private int radius = 1;
  RoundGlyph(int r) {
    radius = r;
    print("RoundGlyph.RoundGlyph(), radius = " + radius);
  }
  void draw() {
    print("RoundGlyph.draw(), radius = " + radius);
  }
}   

public class PolyConstructors {
  public static void main(String[] args) {
    new RoundGlyph(5);
  }
} /* Output:
Glyph() before draw()
RoundGlyph.draw(), radius = 0
Glyph() after draw()
RoundGlyph.RoundGlyph(), radius = 5



若private static int radius = 1;

Glyph() before draw()
RoundGlyph.draw(), radius = 1
Glyph() after draw()
RoundGlyph.RoundGlyph(), radius = 5
*///:~
上一篇 下一篇

猜你喜欢

热点阅读