gpt4 book ai didi

java - 在java中设置静态对象

转载 作者:行者123 更新时间:2023-12-01 08:13:23 24 4
gpt4 key购买 nike

我有课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_ROOT 没有值,因此它被初始化为 null。然后接下来的 3 个变量被初始化。使用 + 连接字符串时,null 会导致 String“null”,因此 3 个值 LOGIN_JSPHOME_JSPLogout 以“null”开头。

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

关于java - 在java中设置静态对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15534593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com