理解类的地图字段上的最终静态用法

lin*_*per 1 java encapsulation final static-members

我是c ++开发人员,并试图熟悉Core Java概念.我发现这个令人困惑的是我的最终静态是在构造对象后无法改变的东西.(如果我错了,请纠正我)

我遇到了下面的实现,我发现这令人困惑,因为它似乎允许将值添加到Map中,即使它是最终静态的

public class MockUserServiceImpl implements UserService {

    private static final Map<String, User> userMap = new HashMap<String, User>();

    public static void addUserToCache(int userId, String userName) {
        if (!userMap.containsKey(userName)) {
            userMap.put(userName, new User(userId, userName));
        }
    } 
}
Run Code Online (Sandbox Code Playgroud)

有人可以试着解释一下这里的静态决赛是什么意思

Sot*_*lis 5

不要将其Map视为数据结构.例如,可以将其视为具有方法的任何其他类put(..).你是说如果有的话

public class Foo {
    public void bar() {}
}
Run Code Online (Sandbox Code Playgroud)

你不应该能够调用bar()

final Foo foo = new Foo();
Run Code Online (Sandbox Code Playgroud)

仅仅因为它是final?它会有什么用处呢?

final关键字仅阻止重新分配变量,而不是可以调用哪些方法或可以访问哪些字段.当在方法和类上使用时,它具有不同的含义.

至于static,阅读:

'static'关键字在一个类中做什么?