В чем разница между "int variable = 0;"и "int variable; variable = 0;"в классе Java? - PullRequest
0 голосов
/ 15 декабря 2018

У меня есть две версии кодов.

Версия 1

Launcher.java

class Launcher {
    public static void main(String[] args) {
        LuckyNumber game;
        game = new LuckyNumber();

        game.start();
    }
}

Player.java

class Player {
    int randomNumber = 0;

    public void roll(){
        randomNumber = (int) (Math.random() * 10);
    }

}

LuckyNumber.java

class Launcher {
    public static void main(String[] args) {
        LuckyNumber game;
        game = new LuckyNumber();

        game.start();
    }
}

Версия 2

Launcher.java

class Launcher {
    public static void main(String[] args) {
        LuckyNumber game;
        game = new LuckyNumber();

        game.start();
    }
}

Player.java

class Player {
    int randomNumber;
    randomNumber = 0;

    public void roll(){
        randomNumber = (int) (Math.random() * 10);
    }

}

LuckyNumber.java

class Launcher {
    public static void main(String[] args) {
        LuckyNumber game;
        game = new LuckyNumber();

        game.start();
    }
}

Первая версия кода компилируется без проблем,но вторая версия кода не может быть скомпилирована, и компилятор показывает следующие ошибки:

.\Player.java:4: error: <identifier> expected
    randomNumber = 0;
                ^
.\Player.java:4: error: cannot find symbol
    randomNumber = 0;
    ^
  symbol:   class randomNumber
  location: class Player
2 errors

Так вот вопрос, почему:

int variable;
variable = 0;

не совпадает с:

int variable = 0;

А какая разница?

Ответы [ 4 ]

0 голосов
/ 15 декабря 2018

Это объявление:

int variable;

, и это объявление с инициализацией:

int variable = 0;

Они действительны как на уровне класса, так и внутри метода.Однако для уже объявленной переменной это:

variable = 0;

считается исполняемым кодом и действует только внутри метода, а не на уровне класса.В IDE, например, IneliJ, если вы напишите:

int variable;
variable = 0;

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

int variable = 0;

, поскольку это то же самое .

0 голосов
/ 15 декабря 2018

У класса в Java могут быть члены.

class Player {
    int variable = 0; // this defines a member variable within the class Player
}

Но вы не можете поместить код / ​​выражения в тело объявления класса.Это может быть только в методах или конструкторе или во время инициализации переменных.

int variable;
variable = 0; // this is an expression and should be within the constructor, a method or the initialiser of the variable.
0 голосов
/ 15 декабря 2018

Это то же самое, пока вы не напишите свой код вне метода.Вы не можете делать так:

class Player {
    int randomNumber;
    randomNumber = 0;

Это приведет к ошибке синтаксиса Java.Вы должны прочитать о свойствах Java.

0 голосов
/ 15 декабря 2018

Они одинаковы, но только если они в методе.

В вашем случае инициализация переменных без их объявления недопустима вне метода.

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