2011-11-20 152 views
1

我正在使用小程序在線測試Web項目。我想聲明一個int類型的變量,它跟蹤正確答案的數量。那麼需要聲明哪個變量以便可以在所有幀中訪問該變量?在Java中聲明全局變量

+0

怎麼樣打造一個類只有所有的參數?並將其用作/作爲參考? – deadfish

回答

2

正如其他人所說,你可以使用public static聲明一個全局變量:

public class MyClass { 

    public static int globallyVisibleInt = ...; 

    // or 

    private static int visibleThroughAccessors = ...; 

    public static void messWithGlobalState(int newValue) { 
     visibleThroughAccessors = newValue; 
    } 

    public static int seeGlobalState() { 
     return visibleThroughAccessors; 
    } 

} 

然後訪問和使用這個變量,任何其他代碼將僅僅需要導入這個類:

// this code is inside another class and package 
MyClass.globallyVisibleInt++; 

// or 
MyClass.messWithGlobalState(14); 

但是,這個全局變量的使用一般是不被接受的。 OOP爲您提供了許多用於處理問題的工具,並且您可能不需要針對此特定情況的全局變量。


Here's關於避免全局變量 - 爲什麼和如何。討論:

與所有HeuristicRules一樣,這不是一個適用於100%的時間的規則。當代碼不使用全局變量時,代碼通常更清晰易於維護,但也有例外。它與GotoConsideredHarmful在精神上類似,儘管使用全局變量不太可能讓你成爲一個無情的黑客。

爲什麼全局變量應儘可能避免不必要的:

  • 非本地
  • 沒有訪問控制或約束檢查
  • 隱耦合
  • 併發問題
  • 測試和禁閉

替代全局變量:

  • ContextObject
  • 有狀態的過程
  • Singleton模式
  • 隱藏全局
+0

@Lion - 我不確定你的建議。 –

1

java中沒有全局變量。您可以使用公共靜態訪問器在某些類或私有靜態字段中聲明公共靜態字段

+0

我知道java中沒有全局變量。將聲明它是靜態的給我們在相同包中的不同框架中訪問它的自由 –

1

OOP中沒有全局變量,但可以聲明公共靜態變量。但這不是一個好習慣!你應該調查如何處理你的情況,並找到另一種方式。

+0

當然在OOP中有全局變量。 –

+0

OOP沒有全局變量,因爲它不是一種語言。甚至Java(例如)在C/FORTRAN意義上也沒有全局變量。在某些時候靜力學必須由封閉類的名稱限定。一個C或FORTRAN全球化是真正的全球化,這是使它們變得危險的事情之一。 –