()方法簡述

今天看深入理解jvm是看到一個<clinit>()方法不懂到底是什麼意思網上搜索了一下得出了下面的一些結論。

 1.<clinit>()方法的定義:

      在編譯生成class文件時,會自動產生兩個方法,一個是類的初始化方法<clinit>, 另一個是實例的初始化方法<init>。我個人認爲可以簡單的理解爲由編譯器自動收集類中的所有變量的賦值動作和靜態語句塊中的語句合併產生的,編譯器收集的順序是由語氣在源文件中出現的順序決定的,靜態語句塊中只能訪問到定義在靜態語句塊之前的變量,定義在它後面的變量可以賦值但不能訪問。

  2.<clinit>()方法的特點

 1)在執行子類的<clinit>()方法時會保證父類的該方法已經執行完畢。

2)<clinit>()方法如果沒有靜態語句塊那麼編譯器不會爲該類執行<clinit>()方法。

3)接口中無靜態語句塊但是有賦值操作,因此接口也會有<clinit>()方法,但是接口的<clinit>()方法只用當子類和實現類中定義的變量有使用時纔會執行<clinit>()方法。

4)<clinit>()方法的線程安全。

3.<clinit>()方法的過程

   


參考:1.深入理解jvm

          2.<init>與<clinit>的區別 http://blog.csdn.net/sunmenggmail/article/details/10211395

   3..clinit和init(轉載) http://www.cnblogs.com/diyunpeng/archive/2010/07/11/1775200.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章