java - 在 Java 中设置全局变量

标签 java variables static

这是我的问题:我有许多类需要访问特定值(例如电子邮件地址),而不是在每个类中一次又一次地声明它,我想声明一次并使用它来访问它某种全局变量。

现在,在你们的反对者开始尖叫(或对这篇文章投反对票)之前,我知道您可以声明这样的类:

public class GlobalVar{

        public GlobalVar() throws Exception
    {

    }
    public static String email = "myemail@gmail.com";

 }

并使用 GlobalVar.email 在任何地方访问电子邮件

我的问题是电子邮件的值无法设置为静态,因为它来自文本文件(来自使用 Java properties class 的键/属性),而且我无论如何也看不到加载该值如果我将变量设置为静态,则来自 txt 文件。

我基本上将动态生成的电子邮件存储在文件中,并在下次启动应用程序时检索它。当然,我可以在每次需要使用变量时尝试检索它,但这并不优雅。

更新:

提出了一个可能的解决方案如下:

public static String email = null;
static {
    email = "awesome@email.com"; // change to your initialization process
}

我认为这个解决方案可行,但问题是,如果 txt 文件中尚不存在先前的值,则该值是在启动时动态生成的。基本上,如果这是您第一次运行应用程序,则会生成一个新值。否则,将从 txt 文件(在程序上次运行时生成)中检索该值。

如果我实现此解决方案,如果这是您第一次运行该程序,则电子邮件的值将等于 null(在整个程序中)。

我基本上需要一种使用条件语句来初始化静态变量的方法,但我不知道这是否可行。

谢谢

最佳答案

要初始化静态变量,您可以使用static(请参阅static initialization blocks):

public static String email = null;
static {
    email = "awesome@email.com"; // change to your initialization process
}

另一种方法是使用静态函数:

class Mail {
    public static String email = initializeMailVariable();

    private static String initializeMailVariable() {
        // initialization code goes here
    }
}

关于java - 在 Java 中设置全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32041528/

相关文章:

java - isReady() 在关闭状态下返回 true - 为什么?

java - 如何创建与 mysql 根目录的连接以访问所有数据库?

php - 在 SESSION 中打印所有登录用户?

java - 从抽象类继承静态变量

java - 这个图案的名字是什么? (答案: Remote Proxy)

string - Gforth 在变量中存储字符串值

java - 当我们声明变量时,编译器实际上做了什么?

c - 静态链接错误

c++ - constexpr:constexpr 成员的定义和声明

java - 如何创建base64Binary数据?