java語句順序有時非常重要

來源:互聯網
上載者:User

標籤:ret   turn   track   div   運行   oid   atom   main   zab   

我們學習java時,通常被告知,變數定義的順序不重要,可是下面程式確在jdk 1.7上執行出錯。

public class FactoryImpl implements Serializable {    private final static  FactoryImpl INSTANCE = new FactoryImpl();    private final static AtomicInteger count = new AtomicInteger(0);    private int id;    private FactoryImpl() {        id = count.incrementAndGet();    }    public int getId() {        return id;    }    public static FactoryImpl getInstance() {        return INSTANCE;    }    public static void main(String[] args) {        FactoryImpl impl1 = FactoryImpl.getInstance();        System.out.println(impl1.id);    }}

把下面代碼調整順序之後能夠運行成功。

    private static final FactoryImpl INSTANCE = new FactoryImpl();    private final static AtomicInteger count = new AtomicInteger(0);

原因例如以下,假設不調整時,當類被載入時,先初始化INSTANCE靜態變數,這時,會調用FactoryImpl構造方法,在此構造方法裡,調用count.incremnetAndGet();這時count還沒有初始化。這是因為進行類載入時。靜成變數的初始化順序造成的。

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.