Как из метода вызвать другой метод?
При работе с API я замечаю как интересно можно «вытащить» данные из объекта. Допустим, я хочу узнать имя друга у человека с именем Alex. Чтобы это сделать, я пишу:
String NameOfThumb = person.getPerson(«Alex»).getFriends.get(0).getName(); Как сделать так, чтобы вызывая один метод, я мог сразу вызвать внутри другой, а внутри другого следующий? Как называется такое действие? В интернете я в основном натыкаюсь на extends , implements , но примеры, которые приводят, слишком простые и обощенные. Как я понимаю, что мне стоит использовать это, только я не знаю как именно, чтобы добиться того же результата, что я привел сверху. Прошу меня поправить, если я некорректно выразился и неправильно использовал терминологию.
Отслеживать
задан 30 окт 2018 в 11:16
Antonio112009 Antonio112009
2,629 1 1 золотой знак 20 20 серебряных знаков 46 46 бронзовых знаков
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Это называется fluent interface и достигается возвращением из метода того объекта, методы которого могут вызываться дальше в цепочке. Часто из методов возвращается ссылка на самого себя.
public class Example < public Example someMethod() < System.out.println("Hello"); return this; >public Example anotherMethod() < System.out.println("World"); return this; >public static void main(String[] args) < Example obj = new Example(); obj.someMethod().anotherMethod(); >>
Отслеживать
ответ дан 30 окт 2018 в 12:43
Sergey Gornostaev Sergey Gornostaev
66.6k 6 6 золотых знаков 54 54 серебряных знака 113 113 бронзовых знаков
Это похоже на шаблон Builder , только без .build() в конце )))
– user224616
30 окт 2018 в 13:06
@ОлексійМоренець да, действительно похоже. Особенно в стримах, где промежуточные операции изменяют состояние потока, а терминальная операция что-либо «строит» из этого состояния.
Методы Java: как их вызывать и использовать
Блок кода с именем, объявление которого происходит внутри класса, называется метод. Этот блок может быть использован много раз. Тем, кому доводилось иметь дело с процедурным программированием, например, работать на Pascal, Модула-2, Fortran или Basic, могут сравнить принцип работы метода с функцией.
Метод, написанный без ошибок, решает много важных задач, но хорошо написанный метод должен решать только одну задачу.
Первое, что надо сделать при работе с методом, объявить его. Далее нужно его определить и после этого провести вызов для объекта или класса, с которым мы будем работать. Как это делать правильно, можно научиться на курсах в лучшей IT академии DevEducation
Стандартные методы, или как их еще называют, встроенные, взаимодействуют со служебными объектами. Возьмем для примера метод print в Java. Его задача — вывод значения в консоль. Вот каким способом его надо вызывать:
Важный момент, о котором нельзя забывать это о поле out у класса System, которое является потоком ввода/вывода.
Java-приложение должно быть работоспособным, в связи с этим в своем базовом классе оно обязательно должно иметь объявленный метод main.
public static void main(String[] args) // здесь основной код и вызовы других методов
>
Здесь мы можем наблюдать, как main принимает массив строк. В этом конкретном случае это — параметры запуска.
Получи грант, покрывающий 50% стоимости обучения
И обучайся новой профессии онлайн из любой точки мира
Получить грант
Объявление и определение
Метод, по сути, является именем для действия. Методы могут быть вызваны с указанием параметров или без такового. Тип данных, которые возвращаются при объявлении метода, мы можем увидеть в качестве обозначения перед его именем. Также методы бывают такими, которые возвращают параметры, и которые этого не делают.
Вот элементарный пример, где задача метода — обнаружить среди пары чисел большее. Для примера был использован тип int, так как мы будем работать с целыми числами.
public static int maxFinder(int a, int b) < //заголовок метода
//ниже — тело метода
int max;
if (a < b)
max = b;
else
max = a;
return max;
>
Как мы можем понять, первое, что идет в заголовке — модификаторы. Они должны диктовать условия, согласно которым метод может быть вызван. Давайте рассмотрим, что означают элементы заголовка: int — это возвращаемый тип, maxFinder — это имя метода. Нам еще нужны параметры, которые мы указываем в скобках.
Переменную max мы вводим в теле метода. Именно туда впоследствии будет записано число с большим значением. После этого нам надо сравнить значения, зафиксировать большее в max, как уже говорилось, и возвратить.
К слову, return способен взаимодействовать с выражением, а не только с переменной. Если бы это было конечной целью, то мы получили бы такую строку кода:
Еще два замечания. Мы ставим void, если не предполагается, чтобы метод что-нибудь возвращал. Также мы ничего не пишем в скобках, если входящие параметры вообще не нужны:
static void theWarning() System.out.println(«Мне ничего не надо, и вы от меня ничего не получите.»);
>
Перегрузка методов в Java
Как мы уже говорили выше, метод по своей сути — имя для действия: встать, идти, удалить информацию. Имена при создании кода применяют, в том числе, для упрощения понимания. Программисту нужно четко сформулировать логику, чтобы приложение работало корректно. Программе все равно, какое у метода имя. В первую очередь, понятные названия методов нужны для разработчиков и других «пользователей» кода.
Бывают моменты, когда одно и то же слово может означать разные объекты или действия. Например, «вымыть пол» и «вымыть машину» — это разные действия с одинаковым словом. Написать что-то вроде «половымыть пол» или «машиновымыть машину» — нецелесообразно. Мы делаем методы с одинаковыми именами, но у них должны быть разные наборы аргументов.
Java относится к тем языкам программирования, в которых мы можем создавать какое-то количество методов с одинаковым именем в одном классе. Основное — их параметры должны отличаться по типу или количеству аргументов.
Для примера давайте создадим класс Cat, где будет набор перегруженных методов:
class Cat void meow() // параметры отсутствуют
>
void meow(int count) // используется один параметр типа int
>
void meow(int count, int pause) // используются два параметра типа int
>
long meow(long time) // используется один параметр типа long
return time;
>
double meow(double time) // используется один параметр типа double
return time;
>
>
Смело берите какой угодно метод из класса:
Cat kitty = new Cat();
kitty.meow();
kitty.meow(3);
kitty.meow(3, 2);
kitty.meow(4500.25);
Мы без проблем можем увидеть, что за версия вызывается в этих случаях.
87% наших выпускников уже работают в IT
Оставь заявку, и мы поможем с выбором новой профессии
Оставить заявку
Алгоритм вызова
Если нам надо, чтобы метод вызывался из любого необходимого класса или из внешнего файла, мы используем модификатор public. Модификатор private — только внутри своего класса.
Мы можем вызвать статический метод в Java без того, чтобы создавать экземпляр, потому что метод не принадлежит объектам класса, а самому классу. Метод вызова зависит от того, будет он возвращать нам что-то или не будет. Для примера можно сразу вывести возвращаемое значение на экран (как написано в коде):
public static void main(String args[]) System.out.print(maxFinder(3,8));
>
Давайте разберемся, что мы только что сделали. Был не только вызван maxFinder, мы впридачу отобразили на экране конечный результат его работы. Для того, чтобы пример был нагляднее и проще, мы установили числовые значения вручную, но в реальной жизни как правило сравниваются переменные.
А сейчас давайте рассмотрим пример с методом, который не должен что-либо возвращать. Мы берем метод theWarning(). Сразу подчеркнем, что данному методу не нужны помощники. Он выполняет свою задачу и передает управление коду, находящемуся дальше.
public static void main(String args[]) theWarning();
System.out.print(“theWarning завершил свою работу. Идём дальшe.”);
>
Абстрактные методы
Что такое абстрактный метод? Этот тот, объявление которого состоялось без реализации. Он как привидение — без своего тела. У него даже нет своих фигурных скобок. В этом случае, нам придется воспользоваться модификатором abstract — поставить его перед именем метода.
abstract void methodName();
Абстрактные методы можно объявлять только в абстрактном классе. По сути своей, это шаблон.
Узнавайте и учитесь новому, улучшайте уже имеющиеся знания на курсах в IT академии DevEducation. Доступна запись на многие направления и для разных уровней знаний.
Как вызывать методы в Java из другого класса
Давайте пофантазируем. Допустим, произошло какое-то событие, и maxFinder перестал быть статическим и теперь находится в отдельном классе. Как в этом случае действовать? План таков: сначала мы создаем объект класса, в котором гипотетически находится maxFinder. Для простоты давайте думать, что он расположен в классе SampleClass. Вот как происходит вызов в этом случае:
public void main(String args[]) SampleClass sc= new SampleClass();
System.out.print(sc.maxFinder(5,8));
>
В случае, если наш метод статический, вызов происходит через точку и от имени класса:
Вызывать методы из других классов несложно, особенно научиться применять это для написания лучших эффективных приложений. Этому вас научат на курсах в признанной международной IT академии DevEducation.
Начни обучение сегодня
FrontEnd разработчик
Профессия Frontend-разработчик — лидер по количеству запросов от работодателей. Без этого специалиста не может обойтись ни одна современная компания, у которой есть сайт. Хотите стать Frontend-разработчиком и создавать сайты, интернет-магазины, маркетплейсы и прочее? Записывайтесь на наш курс!
QA Automation Engineer
QA Automation Engineer — это специалист, который обеспечивает качество продукта и контролирует все этапы разработки с момента появления идеи до релиза. Он имеет компетенции и тестировщика, и разработчика. Он участвует во всех процессах разработки: от подготовки стандартов и требований до самой разработки продукта. А также владеет ручным тестированием и пишет скрипты для автоматизации этого процесса, докладывает о проблемах и контролирует их исправление.
Project Manager
Project Manager — специалист, без которого не может обойтись ни один IT-проект. Если вы хотите войти в сферу IT-технологий, но учить языки программирования это не для вас, тогда профессия Project Manager — то, что вам нужно! Запишитесь на курс Project Management и начните свой путь в IT!
Популярное
10 задачек, которые дают на собеседованиях в IT-компании
8 главных качеств программиста: что говорят работодатели
Frontend разработчик: главные навыки
Что такое метод и как вызвать метод в Java? 1 мин для чтения
Java предоставляет концепцию методов , которые помогают нам в управлении временем посредством повторного использования кода. Если мы говорим о пользовательских методах, мы должны создать/написать их один раз и можем использовать их снова и снова. В Java метод — это не что иное, как набор инструкций, который вступает в действие только тогда, когда кто-то его вызывает.
В этой статье мы собираемся изучить следующие основные концепции определяемых пользователем методов Java:
Что такое метод в Java
Метод, также известный как функция, представляет собой блок кода/инструкции, который может принимать или не принимать входные данные в качестве параметров/аргументов и возвращает некоторый результат. Указанный блок кода будет выполняться только тогда, когда кто-то вызывает/вызывает его. В java метод должен быть создан/объявлен внутри класса.
Синтаксис метода Java
Ниже будет синтаксис объявления метода:
public static void firstFunction() statement(s); >
Здесь, в приведенном выше фрагменте кода, public — это модификатор/описатель доступа, static — ключевое слово, void — тип возвращаемого значения, а firstFunction() — имя определяемого пользователем метода.
Java предлагает несколько модификаторов доступа, таких как default, private, public и protected. Эти модификаторы определяют тип доступа к функции, как указано ниже:
- Модификатор доступа public определяет, что функция доступна для всех классов/подклассов.
- Модификатор доступаprotected указывает, что метод доступен только внутри определенного пакета.
- Модификатор доступа private определяет, что функция доступна только тем классам, где она указана
- Модификатор доступа default определяет, что функция доступна для классов того же пакета.
Java имеет широкий спектр ключевых слов , которые имеют некоторые специальные значения и используются для определенных целей, например, ключевое слово static определяет, что функция может получить доступ к статическим данным.
Читать Барьеры на пути к эффективной коммуникации
Тип возвращаемого значения определяет тип данных, которые будут возвращены функцией; например, void используется, когда тип данных не возвращается.
Как создать метод в Java
В Java метод можно создать, указав его имя, и мы должны следовать соглашению об именах в верблюжьем регистре.
Для более глубокого понимания давайте рассмотрим пример, который позволит вам понять, как создать пользовательский метод Java:
Пример
В этом примере мы собираемся вычислить куб введенного пользователем числа.
public class MethodExample static void findCube() int number, cube; Scanner scan = new Scanner(System .in); System .out.print("Enter a Number: "); number = scan.nextInt(); cube = number * number * number; System .out.println("Cube of " + number + " is : " + cube); >
У нас есть класс «MethodExample», и внутри класса мы создали метод findCube(). Затем мы использовали встроенный класс Scanner, чтобы получить данные, вводимые пользователем. После этого у нас есть переменная «cube», в которой будет храниться куб числа.
Как вызвать метод в Java
Как только создание метода завершено, мы можем вызвать его, указав имя метода, за которым следует () , как мы сделали в следующем фрагменте кода:
public static void main(String [] args) findCube(); >
Для лучшего понимания рассмотрим полный фрагмент кода и его вывод:
Использование класса сканера помогает нам получать ввод от пользователя, и когда мы запускаем код, пользователь вводит число «3», и, следовательно, мы получаем куб этого числа, т.е. «27». Он показывает уместность пользовательского метода.
Заключение
Метод, также известный как функция, представляет собой блок кода/инструкции, который может принимать или не принимать входные данные в качестве параметров/аргументов и возвращает некоторый результат. Более того, указанный блок кода будет выполняться только тогда, когда кто-то вызывает/вызывает его. В java метод можно создать, указав модификатор доступа, тип возвращаемого значения, за которым следует определяемое пользователем имя метода. И чтобы вызвать метод, нам нужно указать имя метода, за которым следуют маленькие скобки (). В этой статье представлен подробный обзор того, что такое метод и как вызывать метод в Java, а для более глубокого понимания в нем приводится пример вместе с описательным снимком экрана.
Методы в Java
В Java приложение состоит из классов. Классы, в свою очередь, состоят из переменных. Они отвечают за хранение данных и методов, которые отвечают за поведение класса: иначе говоря, логику, которую он может предоставлять (например, обработку некоторых данных, вызов других методов, и т. д.). Говорить о таких составляющих как переменные можно долго, но мы сегодня не для этого собрались. Давайте лучше поговорим о такой составляющей класса как метод. Метод — это именованный блок кода, объявляемый внутри класса. Он содержит некоторую законченную последовательность действий (инструкций), направленных на решение отдельной задачи, который можно многократно использовать. Иными словами, метод — это некоторая функция: что-то, что умеет делать ваш класс. В других языках тоже присутствуют функции. Только в Java они являются членами классов и, согласно терминологии ООП, называются методами. Но прежде чем продолжить, давайте рассмотрим небольшой пример:
public String constructHelloSentence(String name)
Тут ничего сложного: метод Java, задача которого сформировать строку приветствия, с именем, которое мы ему передаем. Как например — Hello world! My name is Bobby Давайте как следует разберемся с построением метода, рассмотрев каждое ключевое слово в объявлении метода (слева направо). Наше первое ключевое слово — public , и оно обозначает модификатор доступа:
Модификаторы доступа
Указывают допустимую область видимости для членов класса, то есть ограничение мест, в которых разрешается использовать какую-то переменную или метод. В языке Java применяют такие модификаторы доступа:
- public : публичный. Методы или поля с этим модификатором общедоступны, видимы другим классам (а точнее, их методам и полям) из текущего пакета и из внешних пакетов. Это самый широкий уровень доступа из известных;
- protected : к методам или переменным с этим модификатором есть доступ из любого места в текущем классе или пакете, или в классах, наследующих данный, а заодно — и методы или поля, даже если они находятся в других пакетах
protected String constructHelloSentence(String name)
String constructHelloSentence(String name)
private String constructHelloSentence(String name)
Далее мы имеем String в сигнатуре метода (первая строка метода, описывающая его свойства).
Возвращаемое значение
Возвращаемое значение — это данные (некий результат выполнения метода), которые приходят на его место после вызова. Каждый метод имеет возвращаемое значение. Или нет?
Методы с возвращаемым значением
Это значение может быть данными любого вида: как переменной простого типа, так и ссылочного. В рассматриваемом примере мы указываем, что метод должен вернуть объект типа String , что как мы помним, является классом, описывающим строку. Второй момент здесь — слово return . Оно имеет прямое отношение к возвращаемому значению: значение, стоящее после него, будет отправлено назад, на место вызова метода, а сам же метод после return закроется. Это слово обычно идёт в последней строке метода (кроме методов с различными ветвлениями типа if, else.. .). Если написать код в следующей строке после return :
private String constructHelloSentence(String name)
то мы получим ругательства компилятора, что не очень хорошо (компилятор ерунду не посоветует). Также нужно помнить, что тип данных после с должен совпадать с объявленным в сигнатуре метода. Подробнее о return читайте здесь.
void
Для каких служит void в Java? Не у всех методов есть возвращаемое значение. Некоторым или нечего, или не нужно ничего возвращать. Что же тогда делать? Тогда в сигнатуре метода на место возвращаемого значения мы пишем void . Как бы выглядел наш метод без возвращаемого значения?
protected void constructHelloSentence(String name)
Вы наверняка заметили, что вместе с возвращаемым значением у нас исчезло слово return Так и есть, ведь наш метод и не должен ничего возвращать. Тем не менее, его можно тут поставить, но без какого-то значения, просто return ; в последней строке. Это в целом бесполезно, поэтому в методах с void он необязателен. Тем не менее, его можно применять с пользой в void методах, например, при ветвлениях или циклах, когда нужно немедленно выйти из метода. Далее в объявлении метода у нас шло constructHelloSentence .
Названия методов
constructHelloSentence — название метода, отличительная особенность, по которой мы сможем отличать тот или иной метод. И, соответственно, вызывать тот или иной метод. Названия методов должны начинаться с маленькой буквы, но и использовать верблюжий стиль (CamelCase, верблюжий регистр): т.е. каждое следующее слово в названии стоит впритык к предыдущему и пишется с большой буквы. Наименования методов должны описывать метод (лучший комментарий — правильное именование). Для этого используйте глаголы или сочетания с глаголами: getCat , delete , createCar , и так далее. В пределах одного класса имена методов должны быть уникальными (не считая перегрузки методов, о чем поговорим немного ниже). Смотрим дальше разбираемый нами метод и видим ( String name )
Параметры метода
Методы могут иметь (или не иметь) определенные данные, которые будут поступать снаружи, а именно — с места, где и был вызван метод. В нашем случае мы видим, что приходит объект типа String с именем name и в дальнейшем мы используем эту переменную в нашем методе. В методе можно использовать неограниченное количество параметров, но больше 7 — не рекомендуется. Когда мы не знаем точное количество элементов, но все эти элементы нужны для одной цели и будут одного типа (например, String ), используется многоточие:
public void constructHelloSentence(String. name)
Обращение к каждому элементу будет такого вида: name[0] Ничего не напоминает? Верно, массив! Ничего не изменится, если мы напишем:
protected void constructHelloSentence(String[] name)
Обращение к элементам также будет вида: name[1] И ещё кое что. Аргументы метода могут быть final:
public String constructHelloSentence(final String name)
Это значит, что ссылка name привязана к конкретному объекту String , и переопределить её нельзя. Про работу с ссылочными переменными и их взаимодействие с зарезервированным словом final можно прочитать в материале “Ссылочные типы данных в Java”.
Вызов методов
Итак, с созданием методов разобрались, теперь давайте поговорим об их использовании. Как вызвать метод в Java? Каждый метод в Java находится в классе. Чтобы разобраться, как устроен вызов методов в Java, возьмем класс:
public class StringConstructor < public String constructHelloSentence(String name) < String resultSentence = "Hello world! My name is " + name; System.out.println(resultSentence); return resultSentence; >>
Так как у нас метод не является статическим (это отдельная тема для разговора, выходящая за рамки сегодняшней статьи), для его вызова нужно сперва создать объект, и уже у него вызвать метод:
class Application < public static void main(String[] args) < StringConstructor stringConstructor = new StringConstructor(); stringConstructor.constructHelloSentence("Den"); >>
В аргументы нашего метода мы передали строку (имя), которую хотим видеть в результирующей строке, выведенной на экран:
Hello world! My name is Den
Также стоит напомнить, что методы можно переиспользовать то количество раз, сколько нам потребуется — ограничений нет.
this
Часто в коде можно увидеть ключевое слово this , как например в сеттерах:
public void setValue(Long value)
И что же оно значит? this в Java — это ссылка на текущий объект данного класса. Например, если мы создали объект:
StringConstructor stringConstructor = new StringConstructor();
то this внутри объекта stringConstructor будет ссылкой на этот же объект. this используется как для ссылки на переменную объекта (как в сеттере выше), так и для вызова некоторого метода. Мы можем немного переписать наш класс:
public class StringConstructor < public String constructHelloSentence(String name) < String resultSentence = this.getSentence() + name; System.out.println(resultSentence); return resultSentence; >private String getSentence() < return "Hello world! My name is "; >>
Через this мы вызываем метод данного объекта, для взятия необходимой строки. Но всё же как правило для методов this почти не используется, так как и без него идёт ссылка на метод данного объекта, в основном он используется для на переменную объекта.
Перегрузка методов
Предположим нам понадобился метод, выполняющий по сути ту же самую логику, но в предложении Hello world ! вместо world мы хотим вставить своё слово (строку). Но ведь у нас уже есть метод constructHelloSentence . Значит, нам нужно придумать новое название для метода, который выполняет по сути тот же функционал? Как бы не так: в этот момент на помощь нам приходит перегрузка методов. Перегрузка методов — это использование одного и того же имени метода несколько раз при его объявлении в классе. С точки зрения синтаксиса языка, не может быть двух одинаковых имен в некотором локальном пространстве. Но при этом допускается объявление методов с одинаковыми именами но отличающимися аргументами. Иными словами, класс содержит в себе перегруженные, когда есть два и более методов с одинаковыми названиями, но различными входными данными:
public class Constructor < public String constructHelloSentence(String name) < String resultSentence = "Hello world! My name is " + name; System.out.println(resultSentence); return resultSentence; >protected String constructHelloSentence(String firstName, String secondName) < String resultSentence = "Hello " + firstName + "! My name is " + secondName; System.out.println(resultSentence); return resultSentence; >>
Здесь мы видим, что методы не обязаны содержать одинаковый модификатор доступа (как и возвращаемый тип). Если вызывается перегруженный метод, то из нескольких объявленных методов компилятор автоматически определяет нужный по параметрам, которые указываются при вызове.