Java инициализирует класс - PullRequest
       2

Java инициализирует класс

0 голосов
/ 17 сентября 2018
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");
} 

Существует два класса. И у класса Game есть проблема, которая говорит о синтаксической ошибке на токене ";" ,, ожидается. Я в замешательстве.

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018

Java разрешает инициализацию только во время

  1. Объявление переменной или
  2. Внутри метода / блока или
  3. Внутри блока.

JVM разрешает выделение памяти только на вышеуказанных этапах.В приведенном вами примере lobby=new Room("pub");, поскольку JVM находится на уровне класса, не знает, как распределить память, что приводит к ошибке.

0 голосов
/ 17 сентября 2018

Следуя Java Инициализация полей doc , есть три варианта:

1- Инициализация при объявлении:

Room lobby=new Room("pub");

2 - Статические инициализаторы:

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

3- Блоки инициализатора:

{
    lobby=new Room("pub");
} 
0 голосов
/ 17 сентября 2018

Вместо:

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

Использовать встроенное объявление и создание экземпляра:

Room lobby = new Room("pub");

Вы можете иметь оператор только внутри блока кода {} (методы, статические / экземпляры, другие конструкции, использующие блок) в классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...