Java 關鍵字static final使用總結


  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)對於方法,表示不可覆蓋,並且可以通過類名直接訪問。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM