了解类的映射字段的最终静态使用 我是C++开发人员,试图熟悉核心java概念。 我发现这让人困惑,因为我的最终静态是在构建对象之后无法更改的。(如果我错了,请纠正我)

了解类的映射字段的最终静态使用 我是C++开发人员,试图熟悉核心java概念。 我发现这让人困惑,因为我的最终静态是在构建对象之后无法更改的。(如果我错了,请纠正我),java,encapsulation,final,static-members,Java,Encapsulation,Final,Static Members,我遇到了下面的实现,我发现它令人困惑,因为它似乎允许在Map中添加值,即使它是最终静态的 public class MockUserServiceImpl implements UserService { private static final Map<String, User> userMap = new HashMap<String, User>(); public static void addUserToCache(int userId, S

我遇到了下面的实现,我发现它令人困惑,因为它似乎允许在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));
        }
    } 
}
公共类MockUserServiceImpl实现UserService{
私有静态最终映射userMap=newhashmap();
公共静态void addUserToCache(int userId,字符串用户名){
如果(!userMap.containsKey(用户名)){
put(用户名,新用户(userId,userName));
}
} 
}

有人能给我解释一下这里的静态final到底是什么意思吗?不要把
Map
看作一个数据结构。可以将其视为具有方法的任何其他类,例如
put(..)
。你是说如果你有

public class Foo {
    public void bar() {}
}
您应该无法在上调用
bar()

final Foo foo = new Foo();
仅仅因为它是
最终版本
?那又有什么用呢

final
关键字仅阻止重新分配变量,而不阻止调用什么方法或访问什么字段

至于
静态
,内容如下:


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

public class Foo {
    public void bar() {}
}
您应该无法在上调用
bar()

final Foo foo = new Foo();
仅仅因为它是
最终版本
?那又有什么用呢

final
关键字仅阻止重新分配变量,而不阻止调用什么方法或访问什么字段

至于
静态
,内容如下:


java中的所有对象都是引用。final关键字表示引用是final的,但对象本身可以是可变的。看


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

java中的所有对象都是引用。final关键字表示引用是final的,但对象本身可以是可变的。看


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

Static
在Java中通常表示静态上下文,与类相对应的内容。在这种情况下,静态字段可以看作是类的字段。静态字段也可以看作全局变量

<> >代码>最终< /代码>与C++中的代码> const 非常类似,意味着引用或值不能重新分配。

当一起使用时,它们表示具有全局可见性的常量引用或值


您可能还想阅读。

static
在Java中通常指静态上下文,与类相对应的内容。在这种情况下,静态字段可以看作是类的字段。静态字段也可以看作全局变量

<> >代码>最终< /代码>与C++中的代码> const 非常类似,意味着引用或值不能重新分配。

当一起使用时,它们表示具有全局可见性的常量引用或值


你可能还想阅读。

好吧,解释一下为什么盲目地说没有用会更有意义。即使这是一个愚蠢的问题,我在这里试图理解。你试过查它吗?是的:)。事实上,这让我很困惑。用户如何可以选择将信息添加到地图中。相反,如果它只是静态的,那么它是有意义的。试着看看是否可以提供任何在线参考。好吧,解释一下为什么盲目地说没有用会更有意义。即使这是一个愚蠢的问题,我在这里试图理解。你试过查它吗?是的:)。事实上,这让我很困惑。用户如何可以选择将信息添加到地图中。相反,如果它只是静态的,那么它是有意义的。我想看看是否有任何在线参考。我找到了解释,试图用C++中的const指针来类推,我们不能改变指针指向的指针。是的,我找到了解释,试图用C++中的const指针来类推,我们不能改变指针指向的指针。