Java關鍵字staticfinal

Static表示“全局”或者“靜態”的意思,用來修飾成員變量和成員方法,也可以形成靜態static代碼塊,被static修飾的成員變量和成員方法獨立於該類的任何對象。

也就是說,它不依賴類特定的實例,被類的所有實例共享。只要該類加載,JVM虛擬機就能根據類名在運行時數據區的方法區內找到他們。因此,static對象可以在它的任

何對象創建之前訪問,無需引用任何對象。

1、static修飾類的成員方法或者成員變量,我們通常稱該方法是靜態方法,該方法是靜態變量;

若用public修飾static成員方法或者成員變量,表示該方法或該變量是全局的,可以在其他類中通過類名直接調用;

若用private修飾static成員變量,表示該變量只能在該類的成員方法中使用,並且可以在該類的靜態代碼塊中使用;

在靜態方法或者靜態代碼塊中只能調用靜態變量,但在非靜態方法或者代碼塊中可以調用靜態和非靜態的變量。

2、靜態代碼塊 非靜態代碼塊 構造函數的加載順序

    靜態代碼塊,在虛擬機加載類的時候就會加載執行,而且只執行一次

    非靜態代碼塊,在創建對象的時候(即new一個對象的時候)執行,每次創建對象都會執行一次

1 public class StaticTest {

2    static {

3        System.out.println("static function...");

4    }

5    {

6        System.out.println("unstatic function...");

7    }

8    public StaticTest(){

9        System.out.println("construct function...");

10    }

11    public static void main(String[] args) {

12        new StaticTest();

13    }

14 }

    運行結果:



    所以這三者的加載順序是 靜態代碼塊>非靜態代碼塊>類構造函數

    注:非靜態代碼塊在不new類的時候是不是執行的。

      如果有多個靜態代碼塊,執行順序是按照代碼塊的先後順序執行。

2、靜態變量

  

public class StaticTest {

    static String a="string-a";

    static String b;

    String c = "string-c";

    String d;

    static{

        System.out.println("----------------------------");

    }

    static {

        System.out.println("static function...");

        privateStaicString("befor static");

        b="string-b";

        privateStaicString("after static");

    }

    {

        System.out.println("unstatic function...");

        privateStaicString("befor unstatic");

        b="string-b";

        privateStaicString("after unstatic");

    }

    public StaticTest(){

        System.out.println("construct function...");

        privateConstructtring("befor construct");

        d="string-d";

        privateConstructtring("after construct");

    }

    public static void privateStaicString(String title) {

          System.out.println("---------" + title + "---------");

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

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

    }

    public void privateConstructtring(String title) {

          System.out.println("---------" + title + "---------");

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

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

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

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

    }

    public static void main(String[] args) {

        new StaticTest();

    }

}

  運行結果:


3、static和final一塊使用

  static final用來修飾成員變量和成員方法,可簡單理解爲“全局常量”!

    (1)對於變量,表示一旦給值就不可修改,並且通過類名可以訪問

    (2)對於方法,表示不可覆蓋,並且可以通過類名直接訪問。

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