HashMap的可变范围

时间:2014-04-06 10:05:07

标签: java variables scope hashmap

我使用以下代码在try-catch块中填充HashMap,确实填充得很好。 问题是在try-catch块之外,它似乎是空的。 它是一个可变范围定义问题吗?这可能很简单,但我被卡住了,请帮忙。

   public class Degrees {

   HashMap<String,String> HM = new HashMap<String,String> ();

   public static void main(String[] args) {

          try ....
            HM.put(Integer.toString(users),Integer.toString(counter));
            System.out.println("HMsize:" + HM.size());
          catch ....

          try ...
          System.out.println("HMsize:" + HM.size()); ---> appears 0
          catch ...

2 个答案:

答案 0 :(得分:0)

主要方法是Static(即每个类一个实例),HashMap不是静态的,这意味着你必须实例化该方法。

什么会起作用,但不要那样做

public class Degrees {

   private static HashMap<String,String> HM = new HashMap<String,String> ();

使用静态变量通常是一种非常糟糕的设计,当在更多地方使用类时可能会导致错误。

您可能想要做的是在班级范围内定义地图:

public class Degrees {
    public static void main(String[] args) {
        HashMap<String,String> HM = new HashMap<String,String> ();
        try ....

答案 1 :(得分:0)

上面的代码无法编译,因为静态上下文中无法引用非静态变量HashMap。请确保尝试将静态修饰符添加到HashMap。

    private static HashMap<String,String> HM = new HashMap<String,String> ();