1

我使用-Dpath.eai=C:\home\eai设置了 JVM 选项。根据我调用 System.getProperty("path.eai") 的位置,我没有相同的结果。

调用最终类属性的初始化

public static final String DIRECTORY = System.getProperty("path.eai");

private static String printDirectory() {
    System.out.println("My directory is " + DIRECTORY);
}

==> DIRECTORY为 null

在方法内部调用

private static final String EAI_PATH_PROPERTY = "path.eai";

public static final String DIRECTORY = getEaiPath();

private static String getEaiPath() {
    String eaiPath = System.getProperty(EAI_PATH_PROPERTY);
    return eaiPath;
}

private static String printDirectory() {
    System.out.println("My directory is " + DIRECTORY);
}

==> 目录是 C:\home\eai

4

1 回答 1

1

听起来这是一个初始化顺序问题。您可能正在从静态块或在初始化之前尝试访问它的某个地方访问 DIRECTORY。

我无法重现您所说的问题,除非在初始化 DIRECTORY 之前初始化某些内容,例如

class A {
    public static final String FILE = printDirectory() + "/hello.txt";
    public static final String DIRECTORY = System.getProperty("path.eai");

    private static String printDirectory() {
        System.out.println("My directory is " + DIRECTORY);
        return DIRECTORY;
    }
}

在这里,FILE 在 DIRECTORY 之前被初始化。在初始化 FILE 时,DIRECTORY 仍然为空。

于 2017-10-26T16:19:22.653 回答