Java對象的初始化過程

來源:互聯網
上載者:User

標籤:簡單的   pre   order   tle   print   cto   xtend   空間   padding   

Java對象的初始化步驟如下:

1.首先將分配給對象的儲存空間初始化為二進位的零;

2.如果有繼承,則先調用基類的構造器;

3.按照聲明的順序調用成員的初始化方法;

4.調用匯出類的構造器主體.

看下面的例子:

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);    }}

輸出結果:

結果分析:

1).匯出類RoundGlyph覆蓋了基類Glyph中的draw()方法.當基類Glyph構造器調用draw方法時,實際會調用RoundGlyph的draw()方法;

2).由於對象初始化時,首先將分配給對象的儲存空間初始化為二進位的零,因此此時radius的值為0.

結論:

1).編寫構造器時有一條有效準則:"用儘可能簡單的方法使對象進入正常狀態;如果可以的話,避免調用其他方法";

2).在構造器內唯一能安全調用的那些方法是基類中的final方法(也適用於private方法,它們自動屬於final方法).這些方法不能被覆蓋,因此也就不會出現上述令人驚訝的問題.

Java對象的初始化過程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.