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


轉載自:

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

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

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

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

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

a、在靜態方法里只能直接調用同類中其他的靜態成員(包括變量和方法),而不能直接訪問類中的非靜態成員(這是因為,對於非靜態的方法和變量,需要先創建類的實例對象后才可使用,而靜態方法在使用前不用創建任何對象)

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

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

 

java中類加載順序

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

 

 

 

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM