Java中靜態變量的適用場景

Java類中的靜態變量在程序運行期間,其內存空間對所有該類的對象實例而言是共享的,有些時候可以認爲是全局變量。因此在某些時候爲了節省系統內存開銷、共享資源,可以將類中的一些變量聲明爲靜態變量,通過下面的例子,你可以發現合理應用靜態變量帶來的好處:

 

public class WeekA{

       static class Data { 

             private int week;
             private String name;
             Data(int i, String s) {
                   week= i;
                   name = s;
             }
       }

       Data weeks[] = {
             new Data(1, "Monday"),
             new Data(2, "Tuesay"),
             new Data(3, "Wednesday"),
             new Data(4, "Thursday"),
             new Data(5, "Friday"),
             new Data(6, "Saturday"),
             new Data(7, "Sunday")
       };

       public static void main(String args[]) {

             final int N = 10000;
             WeekA weekinstance;
             for (int i = 1; i <= N; i++){
                   weekinstance = new WeekA ();
             }

       }

}

 

在上面這段代碼中,沒有將Data weeks聲明爲靜態變量,因此當創建WeekA對象時將會得到10 000個weeks對象的副本,這些對象被保存在內存中,但是weeks對象中的數據卻從來沒有被更改過,而且十分穩定。因此,如果能使所有對象共享該數據對象是個不錯的解決辦法,請看下面的代碼:

public class WeekB{

      static class Data { 

             private int week;
             private String name;
             Data(int i, String s) {
                   week= i;
                   name = s;
            }

      }

      static Data weeks[] = {
             new Data(1, "Monday"),
             new Data(2, "Tuesay"),
             new Data(3, "Wednesday"),
             new Data(4, "Thursday"),
             new Data(5, "Friday"),
             new Data(6, "Saturday"),
             new Data(7, "Sunday")
      };

      public static void main(String args[]) {

             final int N = 10000;
             WeekB weekinstance;
             for (int i = 1; i <= N; i++){
                   weekinstance = new WeekB ();
             }
     }

}    

 請注意在類WeekB中,在Data weeks[]之前添加了static關鍵字,將該對象變量聲明爲靜態的,因此當你創建10 000個WeekB對象時系統中只保存着該對象的一份拷貝,而且該類的所有對象實例共享這份拷貝,這無疑節約了大量的不必要的內存開銷,同時實現了要完成的系統功能。

那麼是不是我們應該儘量地多使用靜態變量呢?其實不是這樣的,因爲靜態變量生命週期較長,而且不易被系統回收,因此如果不能合理地使用靜態變量,就會適得其反,造成大量的內存浪費,所謂過猶不及。因此,建議在具備下列全部條件的情況下,儘量使用靜態變量:

(1)變量所包含的對象體積較大,佔用內存較多。

(2)變量所包含的對象生命週期較長。

(3)變量所包含的對象數據穩定。

(4)該類的對象實例有對該變量所包含的對象的共享需求。

如果變量不具備上述特點建議你不要輕易地使用靜態變量,以免弄巧成拙。

 

本文內容有部分引用自《Java優化編程》

文中理解有誤之處, 還望高手指點!

 

相關鏈接:

★  Java知識點彙總 

全球軟件項目外包平臺 兼職做外包 掙Money!

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