java類的初始化過程

、java類中的字段,第一步是自動初始化,好比定義了 
java

Java代碼  收藏代碼ide

  1. private int i;  spa


因爲沒有給其賦值,i會被自動賦值爲0。這個步驟是僅限於類中的字段的,若是方法中的臨時變量,不會有這個動做。並且若是在方法中使用未經賦值的變量,編譯會不經過 

二、第二步是指定初始化 
orm

Java代碼  收藏代碼對象

  1. private int i = 3;  blog


若是有了顯式的賦初值,那麼第一步的自動初始化就不會發生了。可是該步驟和自動初始化,一定發生其一。即便在構造方法裏給i賦值爲4,仍是首先會調用指定初始化,先賦值成3再賦值成4 

三、第三步是初始化語句塊初始化 
it

Java代碼  收藏代碼io

  1. {  編譯

  2.     i = 4;  class

  3. }  


這個動做發生在自動初始化或者指定初始化以後,發生在構造方法初始化以前。若是沒有初始化語句塊,那麼這個步驟就不會發生 

四、第四步纔是構造方法中的初始化 

Java代碼  收藏代碼

  1. public className(){  

  2.     i = 4;  

  3. }  


這個動做是發生在初始化語句塊以後,若是沒有的話,就是發生在自動初始化或者指定初始化以後。這個動做也是初始化的最後一個步驟 

五、在類中的任何方法執行以前(包括構造方法),首先會完成全部字段的初始化 

六、類只在初次使用時纔會被加載。「初次使用」一般是指建立類的第一個對象時,或者當初次訪問類中的static字段或者static方法時。可是因爲構造方法實際上也是static方法(只是static關鍵字沒有要求顯式地寫出來),因此也能夠說,類的加載是發生在類的任何static成員(包括static字段、static方法、構造方法)被初次訪問時 

七、當初始化類的字段時,會先初始化static字段,再初始化非static字段 

八、在調用構造方法時,會從最頂端的基類開始,依次調用每一個類的構造方法。若是基類的構造方法是默認構造方法(不含構造方法參數),那麼就不須要顯式地調用super(),可是若是基類只包含含參數的構造方法,就必須顯式地調用super()

本文來自iteye blog: kyfxbl

相關文章
相關標籤/搜索