Java-System.getProperty在最后一个类属性';s初始化,但不在方法中

Java-System.getProperty在最后一个类属性';s初始化,但不在方法中,java,jvm,final,jvm-arguments,getproperty,Java,Jvm,Final,Jvm Arguments,Getproperty,我使用-Dpath.eai=C:\home\eai设置了一个JVM选项。根据调用System.getProperty(“path.eai”)的位置,我不会得到相同的结果 调用最终类属性的初始化 ==>目录为空 在方法内部调用 ==>目录是C:\home\eai听起来这是一个顺序初始化问题。您可能正在从静态块访问目录,或者在初始化之前尝试访问目录的某个位置 我无法重现您所述的问题,除非在初始化目录之前进行初始化,例如 class A { public static final String

我使用-Dpath.eai=C:\home\eai设置了一个JVM选项。根据调用System.getProperty(“path.eai”)的位置,我不会得到相同的结果

调用最终类属性的初始化 ==>目录为空

在方法内部调用
==>目录是C:\home\eai

听起来这是一个顺序初始化问题。您可能正在从静态块访问目录,或者在初始化之前尝试访问目录的某个位置

我无法重现您所述的问题,除非在初始化目录之前进行初始化,例如

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;
    }
}

在这里,文件在目录之前被初始化。初始化文件时,目录仍然为空。

如果删除服务实现方法中调用的受保护静态方法中的
final
?调用的
printDirectory()
在哪里?是否有区别。我正在从私有静态方法访问它。我编辑了我最初的帖子。
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);
}
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;
    }
}