Java中的static靜態代碼塊的使用詳解

來源:互聯網
上載者:User

一.與靜態方法的比較  

  一般情況下,如果有些代碼必須在項目啟動的時候就執行的時候,需要使用靜態代碼塊,這種代碼是主動執行的;需要在項目啟動的時候就初始化,在不建立對象的情況下,其他程式來調用的時候,需要使用靜態方法,靜態方法在類載入的時候 就已經載入 可以用類名直接調用 比如main方法就必須是靜態 這是程式入口。兩者的區別就是:靜態代碼塊是自動執行的; 靜態方法是被調用的時候才執行的。

二.靜態方法注意事項  

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

    a.在靜態方法裡只能直接調用同類中其他的靜態成員(包括變數和方法),而不能直接存取類中的非靜態成員。這是因為,對於非靜態方法和變數,需要先建立類的執行個體對象後才可使用,而靜態方法在使用前

不用建立任何對象。

    b.靜態方法不能以任何方式引用this和super關鍵字,因為靜態方法在使用前不用建立任何執行個體對象,當靜態方法調用時,this所引用的對象根本沒有產生(this關鍵字只能在方法內部使用,表示對“調用方法的那

個對象”的引用)。

  靜態變數是屬於整個類的變數而不是屬於某個對象的。注意不能把任何方法體內的變數聲明為靜態,例如: fun() { static int i=0;//非法。 }

三.程式舉例

複製代碼 代碼如下:public class TestStaticCon {
public static int a = 0;

static {
a = 10;
System.out.println("父類的靜態代碼塊在執行a=" + a);
}

{
a = 8;
System.out.println("父類的非靜態代碼塊在執行a=" + a);
}

public TestStaticCon() {
this("a在父類帶參構造方法中的值:" + TestStaticCon.a); // 調用另外一個構造方法
System.out.println(a);
System.out.println("父類無參構造方法在執行a=" + a);
}

public TestStaticCon(String n) {
System.out.println(n);
System.out.println(a);

}

public static void main(String[] args) {
TestStaticCon tsc = null;
System.out.println("!!!!!!!!!!!!!!!!!!!!!");
tsc = new TestStaticCon();
}
}

複製代碼 代碼如下:運行結果:
父類的靜態代碼塊在執行a=10
!!!!!!!!!!!!!!!!!!!!!
父類的非靜態代碼塊在執行a=8
a在父類帶參構造方法中的值:10
8
8
父類無參構造方法在執行a=8

四.網友提供
複製代碼 代碼如下:public class StaticBlock {

static {
System.out.println("靜態塊");
}
{
System.out.println("構造塊,在類中定義");
}

public StaticBlock() {
System.out.println("構造方法執行");
}

public static void main(String[] args) {
new StaticBlock();
new StaticBlock();
}

}

複製代碼 代碼如下:靜態塊
構造塊,在類中定義
構造方法執行
構造塊,在類中定義
構造方法執行

  結論:靜態代碼塊是在類載入時自動執行的,非靜態代碼塊是在建立對象時自動執行的代碼,不建立對象不執行該類的非靜態代碼塊。且執行順序為靜態代碼塊------非靜態代碼塊----建構函式。

  其中讓我疑惑的是“a在父類帶參構造方法中的值:10”,我再想那時候為什麼不是8,debug了(F11,不能直接設定斷點然後運行,那樣和直接運行沒區別),發現先進入了無參的構造方法,執行了第一條語句並且切換到了另一個構造方法(不管是不是反正第一句都要執行,此時a還是10,非靜態代碼塊還未執行),提示找不到源,不管是不是這條語句都提示了這個警告(不算錯誤,因為程式繼續正常運行),然後運行了非靜態代碼塊,繼而從有參的構造方法處繼續執行……

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.