初始化顺序

class Glyph {
    void draw() { System.out.println("Glyph.draw()"); }
    Glyph() {
        System.out.println("Glyph() before draw()");
        draw();
        System.out.println("Glyph() after draw()");
    }
}

class RoundGlyph extends Glyph {
    private int radius = 1;
    RoundGlyph(int r) {
        radius = r;
        System.out.println("RoundGlyph.RoundGlyph(), radius = " + radius);
    }
    void draw() {
        System.out.println("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
*///:~
初始化的实际过程是:

1.在其他任何事物发生之前,将分配给对象的储存空间初始化成二进制的零。
2.调用基类构造器,此时,调用被覆盖的方法(在调用子类构造器之前调用)。
3.按照声明的顺序调用成员的初始化方法。
4.调用导出类的构造器主体。

编写构造器时有一条准则:用尽可能简单的方法使对象进入正常状态;如果可以的话,避免调用其他方法。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   最近在看回顾Java基础的时候,发现看似很简单的类初始化的顺序却并不是那么简单(往往越是简单的东西反而越容易出...
    BrightLoong阅读 1,504评论 0 2
  • 父类 static 块 1 执行 父类 静态成员staticSam1初始化 父类 静态成员staticSam2初始...
    YCix阅读 1,353评论 0 0
  • 类的加载与对象创建过程 Java中每个类的编译代码都存在于他自己的独立的文件中。该文件只在需要使用程序代码时才会被...
    Specime阅读 462评论 0 0
  • 口感浓郁,带有清鲜的果香和龙舌兰酒的特殊香味,入口酸酸甜甜,非常的清爽。这款酒做的酒吧非常多,不过如果你去比较好的...
    天才在工作阅读 1,196评论 0 50
  • 声明:面试题系列都是 qq群大神群主 总结的一小部分 XMPP是什么 什么是FMDB Socket ------又...
    BeijingIamback阅读 451评论 0 1