繁体   English   中英

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

[英]understanding a final static use on a map field of a class

我是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));
        }
    } 
}

有人可以解释一下这里的static final到底是什么意思吗

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

public class Foo {
    public void bar() {}
}

你不应该能够调用bar()

final Foo foo = new Foo();

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

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

至于static ,请阅读:

“ static”关键字在课程中做什么?

java中的所有对象都是引用。 final关键字表示引用是最终的,但对象本身可以是可变的。 看一下Java的最终版与C ++的const

静态关键字表示所有对象共享一个实例。

static在Java中,一般是指静态的情况下,对应的类的东西。 在这种情况下,可以将静态字段视为类的字段。 静态字段也可以视为全局变量。

final与C ++中的const非常相似,这意味着不能重新分配引用或值。

一起使用时,它们表示恒定的参考值或具有全局可见性的值。

您可能还需要阅读JLS§8.3.1字段修饰符

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM