Почему void, когда я храню значение в переменной - PullRequest
0 голосов
/ 26 июня 2018

Итак, вопрос в том. Если я вызываю метод предположения из класса - Player, и это метод типа void без оператора return, почему я могу сохранить результат number = (int)(Math.random() * 10) в переменной number для 3 различных объектов (p1, p2, p3) * * 1005

Меня немного смущает вопрос, когда мне следует использовать метод return или методы типа void, потому что если number = (int)(Math.random() * 10) дает некоторые результаты, которые я хочу использовать, почему тогда мне не нужно возвращать эти результаты из метода передать их в переменную number, которую я объявил в int number = 0;

    public class Player {
       int number = 0;

       public void guess() {
          number = (int)(Math.random() * 10);
          System.out.println("I'm guessing " + number);
       }
    }

Ответы [ 3 ]

0 голосов
/ 26 июня 2018

Метод void ничего не возвращает, но все же позволяет вам что-то делать. (Вывод на консоль, изменение переменных и т. Д.) Ключевое слово void просто означает, что оно не возвращает значение. (В void методах вы все равно можете использовать пустой return; для завершения метода) И поскольку вы изменяете переменную number в объекте GuessGame, сделанные вами изменения сохранятся, даже если вы не вернете переменная. Попробуйте этот простой тест, чтобы понять, что я имею в виду:

//In your GuessGame class
int number = 0;
public void foo() {
    number++;
}

public static void main(String[] args) {
    GuessGames games = new GuessGames();
    games.foo();
    System.out.println(games.number);
    //Outputs 1
}

документы для оператора return

0 голосов
/ 26 июня 2018

Суть в следующем: где результат Math.random() * 10 физически , сохраненный на вашем компьютере при запуске вашей программы? Вы перечисляете два варианта.

Опции 1: Поле экземпляра

В этом случае компилятор дает указание вашей операционной системе зарезервировать место для переменной int на весь срок службы объекта Player. Объект игрока может жить в течение микросекунд, секунд, минут, часов, дней, месяцев, ... это зависит! Это место для хранения обычно находится в ОЗУ компьютера, и с Java вы можете получить к нему доступ с помощью синтаксиса myPlayer.number, если у вас есть ссылка на Player где-нибудь.

Опции 2: Возвращаемое значение

В этом случае компилятор находит место для хранения результата вычислений в регистре виртуальной машины Java, который можно мысленно отобразить в регистр физического процессора. Это значение будет в лучшем случае сохраняться только в течение нескольких тактов процессора (в процессоре с частотой GHz есть газилино, так что это действительно крошечная доля секунды), если вы не сохраните его где-то еще, а если нет потерян навсегда . Смотрите следующий пример:

private int someRandom;

private int gimmeARandom() {
  return Math.random() * 10;
}

private int test() {
  int someRandom = gimmeARandom(); // --> store the value until end of method
  this.someRandom = someRandom;    // --> further keep it so we can read it later
  gimmeARandom();                  // --> what did it returned? We'll never know
}
0 голосов
/ 26 июня 2018

Void отличается от статического - void просто означает, что функция ничего не возвращает, но все же может быть методом экземпляра, то есть тем, который связан с каждым new экземпляром класса. Я думаю, вы путаете это с функциональностью static, которая позволяет вызывать методы без экземпляра класса.

...