1. 程式人生 > >Java中static問題

Java中static問題

criteria ndis iter 對象 ron logs 變量定義 加載 會有

一定要清楚static,如果胡亂使用極易造成各種錯誤。

(1)比如:如果定義某個全局變量a是static的,當多次測試代碼時,前一次運行測試得到a的值對下一次測試結果會有影響,這樣的話就造成了多次測試所得到的結果會出現錯誤,所以盡量不要將類中需要被多次賦值的變量定義為靜態的。

(2)使用static修飾函數時候,如果想要使用全局變量,這時候必須將全局變量定義為static,因為靜態函數只能訪問靜態變量,不可訪問非靜態變量。這種情況會出現空指針異常,所以在使用的時候需要小心!

(3)被static修飾的成員變量或方法獨立於該類的對象,只要該類被加載,可以在對象創建即實例化之前訪問

    • 靜態變量
      被static修飾的變量即為靜態變量,當JVM加載類後,可以通過類名直接訪問,類的所有實例共享一個static變量
    • 靜態方法
      靜態方法可以直接通過類名調用,但是不能直接訪問所屬類的實例變量和方法,只能訪問所屬類的靜態變量和方法,這是因為實例成員只與特定對象關聯。
    • 靜態代碼塊
      為類中獨立於類成員的static語句塊,不在任何方法體內,當JVM加載類時,就會執行靜態代碼塊,無需等待實例化,static語句塊可以多個,JVM會按照它們的先後順序依次執行。

(4)通常static 和final一起使用,用於定義不變的變量。比如下面這種情況:

1     public static final int CENTER_ORDER=0;
2     public static final int CENTER_RANDOM=1;
3 public static final int MAX_ATTEMPTS=4000; 4 public static final double MIN_CRITERIA=1.0; 5 public static final double MIN_EUCLIDEANDISTANCE=0.8;

Java中static問題