Почему мне нужно создать экземпляр моего класса для вызова моего метода в статическом методе? - PullRequest
0 голосов
/ 06 октября 2018

Я начинаю изучать Java и у меня возникает вопрос nooby.У меня есть набор экземпляров в моем блоке класса с 2 методами, 1 основным статическим и 1 пустым

public class CurrencyConverter {
    int rupee = 63;
    int dirham = 3;
    int real = 3;
    int chilean_peso = 595;
    int mexican_peso = 18;
    int _yen = 107;
    int $austrailian = 2;
    int dollar = 0;
    int Rupee = 63;

    /**
    * @param args the command line arguments
    */
    public static void main(String[] args) {
        // TODO code application logic here
        CurrencyConverter cc = new CurrencyConverter();
        cc.printCurrencies();
    }

    void printCurrencies() {
        System.out.println("rupee: " + rupee);
        System.out.println("dirham: " + dirham);
        System.out.println("real: " + real);
        System.out.println("chilean_peso: " + chilean_peso);
        System.out.println("mexican_peso: " + mexican_peso);
        System.out.println("yen: " + _yen);
        System.out.println("australian: " + $austrailian);
        System.out.println("dollar: " + dollar);
        System.out.println("Rupee: " + Rupee);                
    }       
}

Теперь мой вопрос, почему мне нужно создавать экземпляр моего класса CurrencyConverter для вызова printCurrencies ()?Вы не можете обычно просто вызывать методы в любом случае?Я нахожусь в том же блоке класса?

Я пытался изменить модификатор доступа printCurrencies () на статический, но тогда мои локальные переменные не статичны

Почему мне НУЖНО создавать экземпляры?

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Нестатические поля связаны с экземпляром.У вас есть одна копия этих полей для каждого экземпляра.

public class CurrencyConverter {
    int rupee = 63; // non static instance field
    int dirham = 3; // non static instance field
    // etc.

почему мне нужно создавать экземпляр моего класса CurrencyConverter для вызова printCurrencies ()?

Без экземпляра у вас есть ноль копий, и, следовательно, нечего печатать.

Разве вы обычно не можете просто вызывать методы?

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

public static void main(String[] args) {
    printCurrencies();
}

static void printCurrencies() {
}  

Я нахожусь в одном блоке класса?

Не уверен, что вы имеете в виду, но естьэто только один класс, и все в нем.

int rupee = 63;
int Rupee = 63;

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

Я попытался изменить модификатор доступа printCurrencies () на static, но тогда мои локальные переменные не являются статичными.Почему мне НУЖНО создавать экземпляры?

Копия нестатических полей не существует, пока вы не создадите их явно.

0 голосов
/ 06 октября 2018

думать о классе как о шаблоне или рецепте объекта.При создании экземпляра вы создаете объект с этим конкретным шаблоном.Теперь есть объект со значениями, к которым вы можете получить доступ.Шаблон (так же как и класс) имеет только описание поля, которое может содержать определенные значения.Поэтому нет значения, к которому вы можете получить доступ.

А теперь статика: Статические поля - это поля, которые создаются в начале среды выполнения.Поэтому вы можете получить доступ к значению в любое время, не создавая объект, поскольку они принадлежат не объекту, а определенному классу.

Ваше решение избавиться от создания экземпляров - сделать все члены этого класса статичными.

(помните: каждый элемент const является статическим)

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