2024-09-21 08:00:04

Java中的全局变量

如何在Java中定义全局变量?


当前回答

在构建面向对象编程时,要理解变量的作用域与封装这些变量的类对象紧密地独占。

创建“全局变量”的问题在于,它不是Java的行业标准。它不是行业标准,因为它允许多个类异步操作数据,如果您正在运行一个多线程应用程序,从线程安全的角度来看,这将变得更加复杂和危险。使用全局变量无效还有其他各种原因,但如果您想避免这种情况,我建议您采用面向方面编程。

面向方面编程解决了这个问题,它让父类通过所谓的“建议”来负责作用域,它在代码中添加了额外的行为,而不需要实际修改它。它为横切关注点或全局变量的使用提供解决方案。

Spring是一个利用AOP的Java框架,虽然它传统上用于web应用程序,但核心应用程序可以在整个Java框架(包括8.0)中普遍使用。这可能是你想要进一步探索的方向。

其他回答

如果需要更新全局属性,可以使用简单的getter/setter包装器类作为全局变量。下面是一个典型的例子。

public class GlobalHolder {

    private static final GlobalHolder INSTANCE = new GlobalHolder();

    private volatile int globalProperty;

    public static GlobalHolder getInstance() {
        return INSTANCE;
    }

    public int getGlobalProperty() {
        return globalProperty;
    }

    public void setGlobalProperty(int globalProperty) {
        this.globalProperty = globalProperty;
    }

    public static void main(String[] args) {
        GlobalHolder.getInstance().setGlobalProperty(10);
        System.out.println(GlobalHolder.getInstance().getGlobalProperty());
    }
}

你不。这是故意的。即使你能做,你也不应该做。

也就是说,您可以在一个名为Globals的类中创建一组公共静态成员。

public class Globals {
   public static int globalInt = 0;
   ///
}

但你真的不应该:)。认真. .不要这样做。

要定义全局变量,可以使用静态关键字

public final class Tools {
  public static int a;
  public static int b;
}

现在您可以通过调用从任何地方访问a和b

Tools.a;
Tools.b;

你说得对……特别是在J2ME中… 可以通过将NullPointerException放入MidLet构造函数中来避免 (程序初始化)这行代码:

new Tools();

这确保了Tools将在任何指令之前分配 它使用了它。

就是这样!

一般来说,全局变量(我假设您正在与C进行比较,Cpp)定义为公共静态final

like

class GlobalConstant{
    public static final String CODE  = "cd";
}

enum在这样的场景中也很有用:

例如Calendar.JANUARY)

从概念上讲,全局变量又称实例变量,是类级变量,即类级变量。,它们定义在类内部,但在方法之外。为了使它们完全可用,并直接使用它们,提供静态关键字。 因此,如果我正在编写一个简单的算术运算程序,它需要一个数字对,然后两个实例变量定义如下:

public class Add {
    static int a;
    static int b; 
    static int c;

    public static void main(String arg[]) {
        c=sum();
        System.out.println("Sum is: "+c); 
    }

    static int sum() {
       a=20;
       b=30;
       return a+b;   
    }
}

Output: Sum is: 50

此外,在实例变量之前使用static关键字使我们不必反复为相同的变量指定数据类型。直接写出变量即可。