在java中设置静态对象

在java中设置静态对象,java,string,static,Java,String,Static,我有一个类GlobalData public class GlobalData { public static String SERVER_ROOT; public static String LOGIN_JSP = GlobalData.SERVER_ROOT + "login.jsp"; public static String HOME_JSP = GlobalData.SERVER_ROOT + "s/home.jsp"; public static

我有一个类
GlobalData

public class GlobalData {
    public static  String SERVER_ROOT;
    public static  String LOGIN_JSP = GlobalData.SERVER_ROOT + "login.jsp";
    public static  String HOME_JSP = GlobalData.SERVER_ROOT + "s/home.jsp";
    public static  String Logout = GlobalData.SERVER_ROOT + "Logout";
    public static ServletContext SERVLET_CONTEXT;
 }
我从contextListener设置这些字符串

        GlobalData.SERVLET_CONTEXT = contextEvent.getServletContext();
        GlobalData.SERVER_ROOT = GlobalData.SERVLET_CONTEXT.getContextPath()+"/";

        System.out.println("setting server root : " + GlobalData.SERVER_ROOT);
        System.out.println("setting Home jsp : " + GlobalData.HOME_JSP);
        System.out.println("setting Login : " + GlobalData.LOGIN_JSP);
        System.out.println("setting Logout : " + GlobalData.Logout)
输出为:

setting server root : /JCMM/
setting Home jsp : nulls/home.jsp
setting Login : nulllogin.jsp
setting Logout : nullLogout

我无法理解这种行为。有人能找到问题出在哪里吗?

初始化
GlobalData
类时,所有静态变量都已设置。
SERVER\u ROOT
没有值,因此它被初始化为
null
。然后初始化接下来的3个变量。当使用
+
连接字符串时,
null
会导致字符串“null”,因此3个值
LOGIN\u JSP
HOME\u JSP
Logout
都以“null”开头


稍后,您设置了SERVER_ROOT,但不更新其他3个,因此它们保留为前面带有“null”的字符串。

初始化
GlobalData
类时,将设置所有静态变量。
SERVER\u ROOT
没有值,因此它被初始化为
null
。然后初始化接下来的3个变量。当使用
+
连接字符串时,
null
会导致字符串“null”,因此3个值
LOGIN\u JSP
HOME\u JSP
Logout
都以“null”开头


稍后,您设置了SERVER_ROOT,但不更新其他3个,因此它们仍然是前面带有“null”的字符串。

很好的解释!!谢谢很好的解释!!谢谢