java基礎--java靜態代碼塊和靜態方法的區別、static用法

來源:互聯網
上載者:User

標籤:

轉載自:

http://blog.sina.com.cn/s/blog_afddb8ff0101aqs9.html

靜態代碼塊:有些代碼必須在項目啟動的時候就執行,這種代碼是主動執行的(當類被載入時,靜態代碼塊被執行,且只被執行一次,靜態塊常用來執行類屬性的初始化)

靜態方法:需要在項目啟動的時候就初始化,在不建立對象的情況下,這種代碼是被動執行的(靜態方法在類載入的時候 就已經載入 可以用類名直接調用)

兩者的區別就是:靜態代碼塊是自動執行的; 靜態方法是被調用的時候才執行的.

使用類的靜態方法時,注意:

a、在靜態方法裡只能直接調用同類中其他的靜態成員(包括變數和方法),而不能直接存取類中的非靜態成員(這是因為,對於非靜態方法和變數,需要先建立類的執行個體對象後才可使用,而靜態方法在使用前不用建立任何對象)

b、 靜態方法不能以任何方式引用this和super關鍵字,因為靜態方法在使用前不用建立任何執行個體對象,當靜態方法調用時,this所引用的對象根本沒有產生。

c、靜態變數是屬於整個類的變數而不是屬於某個對象的。注意不能把任何方法體內的變數聲明為靜態

 

java中類載入順序

1、虛擬機器在首次載入Java類時,會對靜態初始化塊、靜態成員變數、靜態方法進行一次初始化 2、只有在調用new方法時才會建立類的執行個體   3、類執行個體建立過程:按照父子繼承關係進行初始化,首先執行父類的初始化塊部分,然後是父類的構造方法;再執行本類繼承的子類的初始化塊,最後是子類的構造方法 4、類執行個體銷毀時候,首先銷毀子類部分,再銷毀父類部分

 

 

 

總結: 對象的初始化順序:首先執行父類靜態內容,父類靜態內容執行完畢後,接著去執行子類的靜態內容,當子類的靜態內容執行完畢之後,再去看父類有沒有非靜態代碼塊,如果有就執行父類的非靜態代碼塊,父類的非靜態代碼塊執行完畢,接著執行父類的構造方法;父類的構造方法執行完畢之後,它接著去看子類有沒有非靜態代碼塊,如果有就執行子類的非靜態代碼塊。子類的非靜態代碼塊執行完畢再去執行子類的構造方法。總之一句話,靜態代碼塊內容先執行,接著執行父類非靜態代碼塊和構造方法,然後執行子類非靜態代碼塊和構造方法。

注意:子類的構造方法,不管這個構造方法帶不帶參數,預設的它都會先去尋找父類的不帶參數的構造方法。如果父類沒有不帶參數的構造方法,那麼子類必須用supper關鍵子來調用父類帶參數的構造方法,否則編譯不能通過。

 

java基礎--java靜態代碼塊和靜態方法的區別、static用法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.