2011-11-20 149 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全球化是真正的全球化,这是使它们变得危险的事情之一。 –