为什么哈希映射不能是静态的?

sas*_*har 1 java collections data-structures

为什么这种语法不合法..?你能否解释一下设计问题是什么,不允许HashMap像这样的声明是静态的.

static HashMap<String,  String> map2 = new HashMap<String,  String> ();
Run Code Online (Sandbox Code Playgroud)

sep*_*p2k 11

该声明本身就完全合法.我可以想到你会收到错误的两个原因:

  • 您将该声明放在不允许静态声明的地方(例如在方法内).
  • 您没有导入java.util.HashMap(当然,在这种情况下,错误与您使用static关键字无关).


Niv*_*vas 7

static HashMap<String,  String> map2 = new HashMap<String,  String> (); 
Run Code Online (Sandbox Code Playgroud)

如果您在类级别而不是方法中拥有此代码,则完全有效.

你在哪里这个?

更新后:

您具有在方法级别声明的变量,在方法级别不允许使用静态变量.

static变量是类变量.每班一个.因此,仅在方法内部可见的变量(在方法完成后将会死亡)变为"类级别"是没有意义的.至少Java是如何看待它的.