【问题标题】:Java initialize the classJava初始化类
【发布时间】:2018-09-17 09:09:51
【问题描述】:
class Room {
    private String description;  
    private HashMap<String,Room> dir=new HashMap<String,Room>();

    Room(String de){
         description=de;
     }

    public String toString() {
        return description;
    }

    public void add(String s,Room r) {
        dir.put(s, r);
    }
}


class Game {
    Room lobby;   //Syntax error on token";",,expected
    lobby=new Room("pub");
} 

有两个类。游戏类有一个问题,说令牌上的语法错误“;”,,预期。我很困惑。

【问题讨论】:

  • 只需将其更改为 Room lobby=new Room("pub");- 或将此 sn-p 移动到方法中。你写的在类体内是无效的。
  • lobby=new Room("pub"); 不能在类级别,使用直接初始化:Room lobby=new Room("pub"); 或初始化块:{ lobby=new Room("pub"); }

标签: java class syntax


【解决方案1】:

Java 只允许在

期间进行初始化
  1. 变量声明或
  2. 在方法/块内或
  3. 在块内。

JVM 只允许在上述步骤中分配内存。在您提供的示例中,lobby=new Room("pub"); 因为它在类级别 JVM 不知道如何分配内存导致错误。

【讨论】:

    【解决方案2】:

    按照Java的Initializing Fields doc,有三个选项:

    1- 在声明时初始化:

    Room lobby=new Room("pub");
    

    2- 静态初始化块:

    static {
        lobby=new Room("pub");
    } 
    

    3- 初始化块:

    {
        lobby=new Room("pub");
    } 
    

    【讨论】:

      【解决方案3】:

      代替:

      Room lobby;   //Syntax error on token";",,expected
      lobby=new Room("pub");
      

      使用内联声明和实例化:

      Room lobby = new Room("pub");
      

      您只能在类中的代码块{}(方法、静态/实例块、其他使用块的构造)中包含语句。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-09
        • 1970-01-01
        相关资源
        最近更新 更多