黑馬程序員----【javaSE基礎】個人總結--代碼塊

------- android培訓java培訓、期待與您交流! ----------



1,局部代碼塊

局部代碼塊(定義在方法裏)

作用:控制變量的生命週期;

在程序中,當我們已經使用完 x 後,並且在接下來的代碼中,不會再用到x,那麼就沒必要讓x 在內存中佔用空間了,這用情況下,可以使用 局部代碼塊,將x及其所設計到的區域封裝爲局部代碼塊,他們在程序執行中順序不變,只是在執行完成後消失。

public voidmethod(){

      {

           int x = 4;

           System.out.println("x="+x);

      }

}

這種寫法開發並不常見,但是面試可能會出現,它的作用就是可以限定變量的生命週期.

2,構造代碼塊:(初始化塊)

作用:它可以給所有對象進行初始化

存在於:類中。

定義在類裏

{

      System.out.println("我是初始化塊")

}

括號裏的是初始化塊,這裏面的代碼在創建java對象時執行,而且在構造器之前執行!

其實初始化塊就是構造器的補充,初始化塊是不能接收任何參數的,定義的一些所有對象共有的屬性、方法等內容時就可以用初始化塊了初始化!!

好處是可以提高初始化塊的複用,提高整個應用的可維護性。

當類中的構造方法以重載的形式存在時,並且有共同成員變量或共同的方法時,可以通過構造代碼塊對其進行初始化;這樣可以減少代碼的重複!

3,靜態代碼塊:

作用:給類進行初始化。

當類中的方法都被靜態了化,並且構造方法被private了,這時我們不能,在將這個類實例化,然而又想讓類增加一些屬性,就可以使用靜態代碼塊

格式:

            static{

                  靜態代碼塊中的執行語句

            }

特點:隨着類的加載而執行,只執行一次並優先於主函數。 用於給類進行初始化。

Persong   p  =new  Person("XX",XX);

這句話執行了:(對象初始化過程)

   <1> 因爲new用到了Person.class,所以會先找到Persong.class文件並加載到內存中

   <2> 執行該類中的static代碼塊,如果有的話,給Person.class類進行初始化

   <3> p定義函數中,那麼在棧內存中開闢一個變量空間p。

   <4> 在堆內存中給對象分配空間,並分配內存地址值

   <5> 在堆內存中建立對象特有屬性,並進行默認初始化

   <6> 給對象中的屬性進行顯示初始化。

   <7> 調用構造代碼塊對對象進行初始化。(執行類中的構造代碼塊)(6,7是和源碼的順序有關)

   <8> 調用對應的構造函數進行對象初始化。對象初始化完畢。

   <9> 將內存地址賦給棧內存中的p變量。讓p變量指向該對象。

靜態代碼塊和構造代碼塊的異同:

相同點:都是在JVM加載類時且在構造方法執行之前執行,在類中都可以定義多個,

不同點:靜態代碼塊在非靜態代碼塊之前執行(靜態代碼塊—>非靜態代碼塊—>構造方法)。

  靜態代碼塊只在第一次new執行一次,之後不再執行,而構造代碼塊在每new一次就執行一次。

  非靜態代碼塊可在普通方法中定義(不過作用不大);而靜態代碼塊不行。

------- android培訓java培訓、期待與您交流! ----------

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