Вопрос для начинающего инициализации массива Java - PullRequest
0 голосов
/ 13 ноября 2009

Супер тривиальный вопрос для начинающих по массивам Java:

Может кто-нибудь объяснить, почему компилятору это не нравится:

class Cycle {}

public class CycleTest {
    Cycle[] cy = new Cycle[3];
    cy[0] = new Cycle();
    cy[1] = new Cycle();
    cy[2] = new Cycle();
}

Большое спасибо.

Ответы [ 5 ]

7 голосов
/ 13 ноября 2009

Это потому, что код, который вы пытаетесь выполнить, отсутствует в методе или другом типе блока кода. Вы должны объявить метод или конструктор в вашем классе для содержания кода.

Например:

public class CycleTest {
    private void initializeCycle() {
        Cycle[] cy = new Cycle[3];
        cy[0] = new Cycle();
        cy[1] = new Cycle();
        cy[2] = new Cycle();
    }
}
4 голосов
/ 13 ноября 2009

Вы можете использовать инициализатор массива:

public class CycleTest {
    Cycle[] cy = {
        new Cycle(),
        new Cycle(),
        new Cycle()
    };
}
3 голосов
/ 13 ноября 2009

И, если вы на самом деле хотите, чтобы у Cycle [] cy была область видимости объекта (а не только доступ из метода, в котором он определен):

public class CycleTest {
    private Cycle[] cy;
    private void initializeCycle() {
        cy = new Cycle[3];
        cy[0] = new Cycle();
        cy[1] = new Cycle();
        cy[2] = new Cycle();
    }
}

или

public class CycleTest {
    private Cycle[] cy = new Cycle[] {
        new Cycle(),
        new Cycle(),
        new Cycle(),
    };
    private void method() { ... }
    ...
}
2 голосов
/ 13 ноября 2009

Для инициализации переменной экземпляра вы можете использовать блок инициализации экземпляра (аналогично статическому блоку)

class Cycle {}

public class CycleTest {
    Cycle[] cy = new Cycle[3];

    {
        cy[0] = new Cycle();
        cy[1] = new Cycle();
        cy[2] = new Cycle();
    }
}

или вы должны инициализировать его во время объявления.

0 голосов
/ 14 ноября 2009

Вы можете предоставить конструктор для данных инициализации. Конструктор вызывается при создании экземпляра объекта, то есть new. Все, что вам нужно сделать, это назвать его так же, как класс и без возвращаемого типа.

class Cycle {}

public class CycleTest {
  Cycle[] cy;

  // This is a constructor
  // you can put initialization here
  public CycleTest(){
    cy = new Cycle[3];
    cy[0] = new Cycle();
    cy[1] = new Cycle();
    cy[2] = new Cycle();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...