------- 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一次就執行一次。
非靜態代碼塊可在普通方法中定義(不過作用不大);而靜態代碼塊不行。