Вопрос по Java. Когда нет оператора new,

Рейтинг: 0Ответов: 2Опубликовано: 07.04.2015

Читаю литературу по Java. Параллельно начал читать документацию developer.android

Из книги знаю что можно создавать экземпляр класса с помощью оператора new затем используя ссылочную переменную вызывать методы этого класса. Способность понимать код "на лету" пока на минимуме. Поэтому все новое - пугает.

На Девелопере есть такой код: MenuInflater inflater = getMenuInflater();. Хочу понять что здесь происходит? Почему нет оператора new и то что стоит за знаком "=" - это метод этого класса? Прошу объяснять как можно проще, чтобы я не запутался.

Спасибо.

Ответы

▲ 4

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

public MenuInflater getMenuInflater() {
    return new MenuInflater(this);
}
▲ 3

Привет. Давай все разберем по порядку. Ты в качестве пример привел часть кода MenuInflater inflater = getMenuInflater();

MenuInflater - это Класс объекта
дальше идет inflater - это переменная, которая хранит ссылку на объект.

В Java программе могут быть несколько переменных, которые могут ссылаться на один и тот же объект. Если переменной не присвоить ссылку на объект она cодержит по умолчанию значение null, что означает что данная переменная ни на что не ссылается.

За ним следует оператор = это простой оператор присваивания, он присваивает значение с правой стороны в левую. В данном случае у нас присваивается ссылка на объект из правой части в левую.

Ну вот добрались до самого главного. В случае с оператором new он вызывает у класса Конструктор и создает в памяти новый объект. В результате на выход он передает ссылку на этот объект. А оператор = присваивает эту ссылку переменной inflater.

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

Вам следует больше почитать про ООП в Java и объекты что бы лучше разобраться с этим.