在java中设置静态对象

JAV*_*eek 0 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  String Logout = GlobalData.SERVER_ROOT + "Logout";
    public static ServletContext SERVLET_CONTEXT;
 }
Run Code Online (Sandbox Code Playgroud)

我从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)
Run Code Online (Sandbox Code Playgroud)

输出是:

setting server root : /JCMM/
setting Home jsp : nulls/home.jsp
setting Login : nulllogin.jsp
setting Logout : nullLogout
Run Code Online (Sandbox Code Playgroud)

我无法理解这种行为.任何人都可以找到,问题出在哪里?

rge*_*man 6

GlobalData初始化类时,将设置所有静态变量.没有价值SERVER_ROOT,所以它被初始化为null.然后初始化接下来的3个变量.当使用+来连接字符串,一个null导致字符串 "空",使各3个值的LOGIN_JSP,HOME_JSPLogout以"零"开头.

稍后,您设置SERVER_ROOT,但不更新其他3,因此它们保留为前面带"null"的字符串.